4 Algorithmen

4.1 GCD-Algorithmen
4.2 Lineare diophantische Gleichungen
4.3 Chinesischer Restsatz
4.4 Quadratwurzeln in F𝑝
4.5 Quadratische Gleichungen in F2𝑛
4.6 MONTGOMERY-Potenzierung

4.1 GCD-Algorithmen

4.1.1 EUKLID’s Algorithmus

Der Algorithmus von EUKLID berechnet den größten gemeinsamen Teiler 𝑑 = gcd(𝑎,𝑏) zweier natürlicher Zahlen 𝑎,𝑏 N. Die grundlegende, iterativ angewendete Rechenoperation dabei ist modulare Division.35 Algorithmus 1 beschreibt das klassische Verfahren [16, 31, 7, 22, 2]. Es beginnt unter der Voraussetzung 𝑎 > 𝑏 mit einer Modulo-Division 𝑐2 = 𝑎 mod 𝑏. Im nächsten Schritt wird 𝑐2 als Modul verwendet und 𝑐3 = 𝑏 mod 𝑐2 berechnet, wonach 𝑐4 = 𝑐2 mod 𝑐3 folgt usw. . Diese (wegen 𝑐𝑘+1 < 𝑐𝑘) absteigende Sequenz endet wenn 𝑐𝑘+1 = 0 wird36 – das Ergebnis 𝑑 befindet sich dann in 𝑐𝑘.

Algorithmus 1 Euklidischer Algorithmus 𝑑 = gcd(𝑎,𝑏)
Require:   𝑎 𝑏
  𝑐0 𝑎, 𝑐1 𝑏
  𝑘 0
  repeat
   𝑘 𝑘 +1
   𝑐𝑘+1 𝑐𝑘1 mod 𝑐𝑘
  until  𝑐𝑘+1 = 0
  gcd(𝑎,𝑏) ⇐ 𝑐𝑘

Beweis Jeder Iterationsschritt 𝑐𝑖+1 = 𝑐𝑖1 mod 𝑐𝑖 kann in der Umkehrung (vgl. Restklassenbeziehung 22 in Abschnitt 3) als

𝑐𝑖−1 = 𝑞𝑖+1𝑐𝑖 + 𝑐𝑖+1,  0 ≤ 𝑐𝑖+1 < 𝑐𝑖

geschrieben werden. So gesehen wird durch den Algorithmus der folgende Abstieg vorgenommen:

pict

bis 𝑐𝑘+1 verschwindet.

Warum 𝑑 = 𝑐𝑘 ein gemeinsamer Faktor von 𝑎 und 𝑏 ist, wird klar wenn man die Folge rückwärts betrachtet. In der letzten Zeile steht 𝑐𝑘1 = 𝑞𝑘+1𝑑, also teilt 𝑑 den Rest 𝑐𝑘1 (oder kürzer 𝑑𝑐𝑘1). Wenn 𝑑 aber als Faktor in 𝑐𝑘1 enthalten ist, dann kann man 𝑑 auf der rechten Seite der vorletzten Gleichung ausklammern, weshalb es auch als Faktor in 𝑐𝑘2 vorkommen muß. Dies setzt sich bis in die erste Gleichung fort (sämtliche Divisionsreste 𝑐0,𝑐1,…,𝑐𝑘 enthalten folglich 𝑑 als Teiler), in der die Startbedingung 𝑐0 = 𝑎 und 𝑐1 = 𝑏 verankert ist. Deshalb ist der gemeinsame Teiler 𝑑 sowohl in 𝑎 als auch 𝑏 enthalten.

Viel kürzer kann man damit argumentieren, daß die Modulo-Division 𝑐𝑖+1 = 𝑐𝑖1 mod 𝑐𝑖 eine GCD erhaltende Operation ist. Denn mit der Zerlegung 𝑐𝑖 = 𝑐 𝑖𝑑 gilt ausgehend von Formel 22:

pict

d. h. der gemeinsame Teiler 𝑑 in 𝑐𝑖1 und 𝑐𝑖 ist auch in 𝑐𝑖+1 wieder enthalten.37

gcd(𝑐𝑖−1,𝑐𝑖)= gcd(𝑐𝑖+1,𝑐𝑖)= gcd(𝑐𝑖−1 mod 𝑐𝑖,𝑐𝑖)
(36)

Damit 𝑑 wirklich den größten gemeinsamen Teiler stellt, muß es überhaupt alle gemeinsamen Teiler enthalten. Mit dem Ziel dies nachzuweisen betrachten wir nochmals die Folge beginnend mit der vorletzten Gleichung, welche nach 𝑐𝑘 = 𝑑 umgestellt wird. Ersetzt man darin 𝑐𝑘1 mit Hilfe der vorvorletzten Gleichung und fährt aufsteigend fort, so erhält man eine lineare Darstellung für 𝑑 = gcd(𝑎,𝑏),

pict

welche auf ganzen Zahlen 𝛼,𝛽 Z sowie 𝑐0 = 𝑎 und 𝑐1 = 𝑏 beruht.

pict

Mit Hilfe von Formel 37, welche auch Satz von ZOUT genannt wird,38 kann jetzt relativ einfach bewiesen werden, daß 𝑑 wirklich der größte gemeinsame Teiler ist. Nehmen wir dazu an, es gäbe einen weiteren gemeinsamen Teiler 𝑑. Dann würde dieser (auf der rechten Seite von Gleichung 37) als Faktor von 𝑎 und 𝑏 auszuklammern sein und deshalb (wenn man die linke Seite betrachtet) als Teiler von 𝑑 auftreten. Mit anderen Worten stecken alle weiteren Teiler (schon) in 𝑑, weshalb nur dieser der größte gemeinsame Teiler sein kann.

Hinweis Es existieren unendlich viele lineare Darstellungen für 𝑑 als Linearkombination von 𝑎 und 𝑏 (vgl. auch die kurze Betrachtung zu diophantischen Gleichungen auf Seite §). Jede Substitution der Art 𝛼 := 𝛼 +𝑛𝑏 und 𝛽 := 𝛽 𝑛𝑎, mit

pict

erfüllt ZOUT’s Identität 37 ebenso.

pict

Die kleinsten Werte für |𝛼| und |𝛽| zeichnen sich folglich durch die Relationen |𝛼| < 𝑏 und |𝛽| < 𝑎 aus. Um sie zu ermitteln kann man entweder 𝑎 und 𝑏 sukzessive von 𝛼 und 𝛽 subtrahieren/addieren oder man reduziert die ZOUT-Kofaktoren mit Hilfe von 𝑞 = ⌊    -⌋
 |𝛼|/𝑏 bzw. 𝑞 =     --
⌊| 𝛽 |/𝑎⌋ und folgender Formeln:39

pict
4.1.2 Erweiterter euklidischer Algorithmus

Der erweiterte euklidische Algorithmus erlaubt eine effiziente Berechnung der ZOUT-Kofaktoren 𝛼 und 𝛽 zusammen (und gleichzeitig) mit dem größten gemeinsamen Teiler (siehe auch [16, 31, 7, 2]). Dazu berücksichtigt er einige Erkenntnisse aus dem vorigen Abschnitt, insbesondere daß:

Durch Induktion ergibt sich aus

                   --
𝑐𝑖 = 𝑐𝑖−2 − 𝑞𝑖𝑐𝑖−1 = 𝑑𝑐𝑖 = 𝛼𝑖𝑎 + 𝛽𝑖𝑏
(39)

wenn man 𝑐𝑖1 = 𝛼𝑖1𝑎+𝛽𝑖1𝑏 und 𝑐𝑖 = 𝛼𝑖𝑎+𝛽𝑖𝑏 berücksichtigt:

pict

Vergleich mit Ausgangsformel 39 erlaubt die Bestimmung von 𝛼𝑖+1 und 𝛽𝑖+1.

pict

Mit den Startwerten 𝛼0 = 1 und 𝛽0 = 0 (gewährleistet 𝑐0 = 𝑎) bzw. 𝛼1 = 0 und 𝛽1 = 1 (ebenso für 𝑐1 = 𝑏) kann man den erweiterten euklidischen Algorithmus 2 formulieren.

Algorithmus 2 Erweiterter euklidischer Algorithmus
Require:   𝑎 𝑏
  (𝑐0,𝛼0,𝛽0) ⇐ (𝑎,1,0)
  (𝑐1,𝛼1,𝛽1) ⇐ (𝑏,0,1)
  𝑘 0
  repeat
   𝑘 𝑘 +1
   𝑞 ⌊𝑐𝑘−1/𝑐𝑘⌋ {Integer-Division}
   (𝑐𝑘+1,𝛼𝑘+1,𝛽𝑘+1) ⇐ (𝑐𝑘1,𝛼𝑘1,𝛽𝑘1) −𝑞(𝑐𝑘,𝛼𝑘,𝛽𝑘) {𝑐𝑘+1 = 𝑐𝑘1 mod 𝑐𝑘}
  until  𝑐𝑘+1 = 0
  (𝑑,𝛼,𝛽) ⇐ (𝑐𝑘,𝛼𝑘,𝛽𝑘)

Er endet ganz genauso wie Algorithmus 1 bei 𝑐𝑘+1 = 0, ermittelt aber zusätzlich die ZOUT-Kofaktoren 𝛼 = 𝛼𝑘 und 𝛽 = 𝛽𝑘 sowie die teilerfremden Anteile 𝑎 = 𝑎/𝑑 und 𝑏 = 𝑏/𝑑. Letztere findet man wegen 𝑐𝑘+1 = 𝛼𝑘+1𝑎+𝛽𝑘+1𝑏 = 0 am Ende in 𝛽𝑘+1 und 𝛼𝑘+1. Dies wird relativ schnell aus

pict

ersichtlich, wenn man auf beiden Seiten der letzten Gleichung das kleinste gemeinsame Vielfache anvisiert.

pict

Hinweis Als Ergänzung zum Hinweis von Seite § kann man sogar feststellen, daß die „Wahl“ von 𝑞 nicht unbedingt mit einer Modulo-Division verbunden sein muß. Etwas anders könnte man 𝑞 einfach so wählen, daß

Den steilsten Abstieg 𝛥 = 𝑐𝑘+1 𝑐𝑘 erreicht man allerdings, wenn 𝑞 im jeweiligen Iterationsschritt maximal ist. Dies ist aber unter der Voraussetzung 𝑐𝑘+1 0 genau bei einer Modulo-Division 𝑐𝑘+1 = 𝑐𝑘1 mod 𝑐𝑘 der Fall. Ansonsten ist jeder Wert 𝑞 = 0⌊𝑐𝑖−1/𝑐𝑖⌋ geeignet — einzig die Konvergenzgeschwindigkeit nimmt mit kleineren Werten von 𝑞 ab.40

4.1.3 EUKLID’s Algorithmus für Polynome über Z2

Für Polynome mit Koeffizienten aus GF(2) kann man ganz ähnlich verfahren [11, S. 2.3.6],[31, S. 17.3], [7, S. 2.2.1], [2, S. 2.1]. Mit Rückblick auf den Hinweis von Seite § muß man nur folgendes beachten:

  1. Addition und Subtraktion sind gleichwertig (und die Addition wird zu einem Exklusiv-Oder ).
  2. An die Stelle eines wertbehafteten Vergleichs 𝑐𝑘1 𝑐𝑘 tritt ein Vergleich des Polynomgrades deg 𝑐𝑘1 deg 𝑐𝑘.
  3. Die Vorbedingung deg 𝑎 deg 𝑏 kann entfallen, da der Algorithmus selbst die Vertauschung der Argumente vornimmt.
  4. Die Ermittlung von 𝑞(𝑥) läßt sich in folgende Einzelfälle zerlegen:

Algorithmus 3 Erweiterter euklidischer Algorithmus für Polynome in Z2[𝑥]
  (𝑐0,𝛼0,𝛽0) ⇐ (𝑎,1,0)
  (𝑐1,𝛼1,𝛽1) ⇐ (𝑏,0,1)
  𝑘 0
  repeat
   𝑘 𝑘 +1
   if  deg 𝑐𝑘1 deg 𝑐𝑘 then
   𝑞 𝑥deg 𝑐𝑘1deg 𝑐𝑘 {𝑞(𝑥) = 1 im Fall: deg 𝑐𝑘1(𝑥) = deg 𝑐𝑘(𝑥)}
   else
   𝑞 0 {führt letztlich zu: (𝑐𝑘+1,𝛼𝑘+1,𝛽𝑘+1) ⇐ (𝑐𝑘1,𝛼𝑘1,𝛽𝑘1)}
   end if
   (𝑐𝑘+1,𝛼𝑘+1,𝛽𝑘+1) ⇐ (𝑐𝑘1,𝛼𝑘1,𝛽𝑘1) ⊕ 𝑞(𝑐𝑘,𝛼𝑘,𝛽𝑘)
  until  𝑐𝑘+1 = 0
  (𝑑,𝛼,𝛽) ⇐ (𝑐𝑘,𝛼𝑘,𝛽𝑘)

4.1.4 Binärer GCD-Algorithmus

Der binäre GCD-Algorithmus kommt im Gegensatz zum klassischen euklidischen Algorithmus ohne Divisionen aus [7, 16, 32, 34]. Statt dessen wird (beginnend mit 𝑎0 = 𝑎 und 𝑏0 = 𝑏) durch Subtraktion und Halbierung eine stetige Reduktion der Argumente 𝑎 und 𝑏 vorgenommen, welche letztlich zum größten gemeinsamen Teiler 𝑑 = gcd(𝑎,𝑏) führt.41

pict

Der Algorithmus endet spätestens dann, wenn im Schritt 𝑖 = 𝑘 eines der beiden Argumente 𝑎𝑖 oder 𝑏𝑖 verschwindet (im obigen Fall beispielhaft für 𝑏𝑘 = 0). Das Reduktionsschema zeigt Tabelle 2.

Tabelle 2: Reduktionsschema des binären GCD-Algorithmus
𝑎𝑖 𝑏𝑖 gcd(𝑎𝑖+1,𝑏𝑖+1) =

Begründung

gerade
2 gcd (      )
 𝑎-𝑖, 𝑏𝑖
  2  2

gemeinsamer Teiler ist 2

gerade ungerade gcd (     )
 𝑎𝑖,𝑏
 2   𝑖

2 ist kein gemeinsamer Teiler

ungerade gerade gcd (     )
 𝑎𝑖,𝑏𝑖
    2

2 ist kein gemeinsamer Teiler

ungerade, 𝑎𝑖 𝑏𝑖
gcd (𝑎 − 𝑏    )
 -𝑖---𝑖,𝑏𝑖
   2

𝑎𝑖 𝑏𝑖, wie auch 𝑎𝑖 +𝑏𝑖, enthalten den Teiler gcd(𝑎𝑖,𝑏𝑖) = 𝑑, denn 𝑎𝑖 = 𝑎𝑖𝑑, 𝑏𝑖 = 𝑏𝑖𝑑 führt zu gcd(𝑎𝑖 𝑏𝑖,𝑏𝑖) = gcd[𝑑(𝑎𝑖 𝑏𝑖),𝑏𝑖𝑑].
Außerdem sind sowohl Summe als auch Differenz gerade Zahlen (𝑎𝑖 = 2𝜈 +1, 𝑏𝑖 = 2𝜇 +1 ergibt 𝑎𝑖 𝑏𝑖 = 2(𝜈 𝜇)), weshalb 2 als gemeinsamer Teiler wieder ausgeschlossen werden kann.

ungerade, 𝑏𝑖 𝑎𝑖
gcd(𝑎𝑖,𝑏𝑖−2𝑎𝑖)

siehe Fall 𝑎𝑖 > 𝑏𝑖

𝑎𝑖 > 0 0 𝑎𝑖

𝑎𝑖 ist größter gemeinsamer Teiler mit 0

0 𝑏𝑖 > 0 𝑏𝑖

𝑏𝑖 ist größter gemeinsamer Teiler mit 0

Anmerkungen

  1. Bezüglich 𝑎𝑘1 gibt es genau eine Situation, die das Verschwinden von 𝑎𝑘 hervorruft (genauso bezüglich 𝑏𝑘1 und 𝑏𝑘) . Betrachtet man dazu Tabelle 2, so wird 𝑎𝑘1 in folgenden Fällen reduziert:

    1. 𝑎𝑘1 und 𝑏𝑘1 sind gerade: Halbierung von 𝑎𝑘1 = 1 ergibt 0, bedeutet aber ungerades 𝑎𝑘1 (Widerspruch).
    2. 𝑎𝑘1 gerade, 𝑏𝑘1 ungerade: Halbierung von 𝑎𝑘1 = 1 ergibt 0, was ebenfalls ungerades 𝑎𝑘1 bedeutet (Widerspruch).
    3. 𝑎𝑘1 und 𝑏𝑘1 sind ungerade: Halbierung von 𝑏𝑘1 𝑎𝑘1 = 1 ergibt 0, aber unter der Voraussetzung 𝑏𝑘1 = 𝑎𝑘1 + 1 können niemals beide ungerade sein (Widerspruch).
    4. 𝑎𝑘1 und 𝑏𝑘1 sind ungerade: Halbierung von 𝑏𝑘1 = 𝑎𝑘1 führt zu 𝑎𝑘 = 0 und stellt damit den einzig möglichen Fall im Schritt 𝑘 1 dar.
  2. In jedem Iterationszyklus wird entweder 𝑎𝑖 oder 𝑏𝑖 um mindestens ein Bit reduziert.42 Aus diesem Umstand läßt sich (im Fall 𝑎0 > 𝑏0) für die Anzahl der Iterationsschritte ⌈     ⌉
 log2𝑎0𝑘 2⌈     ⌉
 log2𝑎0 schlußfolgern (vgl. auch [15, Theorem 2]).
  3. Die Halbierung des Arguments für den Fall, daß 𝑎𝑖 und 𝑏𝑖 ungerade sind, muß man nicht unbedingt im Iterationsschritt 𝑖 ausführen. Es ist durchaus legitim, falls beispielsweise 𝑎𝑖 𝑏𝑖 gilt, einfach nur 𝑎𝑖+1 = 𝑎𝑖 𝑏𝑖 zu berechnen. Die Differenz ergibt ja bekanntlich wieder eine gerade Zahl (dann ist 𝑎𝑖+1 gerade, 𝑏𝑖+1 ungerade) und es kommt im nächsten Iterationsschritt zu der gewünschten Halbierung.
  4. Den Fall, daß sowohl 𝑎𝑖 als auch 𝑏𝑖 gerade sind, kann man grundsätzlich aus der Haupt-Iterationsschleife herausziehen. Denn wird einmal eines der beiden Argumente ungerade, dann kann dieser Fall niemals wieder eintreten (genau das ungerade Argument ist in allen anderen Reduktionsfällen unveränderlich). Solange beide Argumente gerade sind, kann man sie also kontinuierlich reduzieren, bis nach 𝑛 Schritten entweder 𝑎𝑖 oder 𝑏𝑖 ungerade geworden ist. Danach kann auf 𝑎𝑛 = 𝑎/2𝑛 und 𝑏𝑛 = 𝑏/2𝑛 irgendein binärer (erweiterter) GCD-Algorithmus angewendet werden, der gcd(𝑎𝑛,𝑏𝑛) = 𝛼𝑛𝑎𝑛 +𝛽𝑛𝑏𝑛 ermittelt.

    pict

    Der so ermittelte größte gemeinsame Teiler muß am Schluß nur noch mit 2𝑛 multipliziert werden (also um 𝑛 Bit verschoben), was auch Algorithmus 4 entsprechend wiedergibt.43 Wir können deshalb in den Betrachtungen zum erweiterten binären GCD-Algorithmus (siehe nächste Abschnitte) immer voraussetzen, daß 𝑎 oder 𝑏 ungerade ist.

    Algorithmus 4 Reduktion gerader Argumente
      𝑛 0
      while 𝑎 gerade 𝑏 gerade do
       𝑎 𝑎/2
       𝑏 𝑏/2
       𝑛 𝑛+1
      end while
      𝑑 2𝑛 gcd(𝑎,𝑏) {GCD-Algorithmus mit Voraussetzung: 𝑎 oder 𝑏 ungerade}
  5. Für den Fall, daß entweder 𝑎 oder 𝑏 ungerade ist (oder beide), kann man ausgehend von 𝑎 = 𝑑𝑎 und 𝑏 = 𝑑𝑏 feststellen:44

4.1.5 Erweiterter binärer GCD-Algorithmus

Algorithmus nach KALISKI45 [15] Betrachtet man das Reduktionsschema des binären GCD-Algorithmus, so kann man verschiedenste lineare Transformationen der Art

pict

definieren, wobei sich die einzelnen Betrachtungsweisen durch unterschiedliche Werte in den Koeffizienten unterscheiden. Bei jedem Schritt sind so 𝑎𝑖 und 𝑏𝑖 als lineare Funktion von 𝑎𝑖+1 und 𝑏𝑖+1 darstellbar, die Ausgangsgrößen 𝑎0 und 𝑏0 deshalb als lineare Funktionen von 𝑎𝑖 und 𝑏𝑖.

pict

Durch Einsetzen von 𝑎𝑖 und 𝑏𝑖 in folgende Gleichung,

pict

gefolgt von einem Koeffizientenvergleich, kann man für die konkreten Reduktionsfälle die jeweilige Transformationen der Linearfaktoren ableiten (siehe Tabelle 3). Am Beispiel 𝑎𝑖+1 = (𝑎𝑖 𝑏𝑖)/2, 𝑏𝑖+1 = 𝑏𝑖 soll das Vorgehen exemplarisch verdeutlicht werden.

pict

Aus den Transformationen nach Tabelle 3 kann man außerdem die Determinante

                ||      ||
Di = 𝑢𝑖𝑡𝑖 − 𝑠𝑖𝑣𝑖 = ||𝑢𝑖 𝑣𝑖|| , mit D0 = 1
                |𝑠𝑖  𝑡𝑖|

bestimmen.

Tabelle 3: Linearfaktoren beim binären GCD-Algorithmus nach KALISKI
𝑎𝑖 𝑏𝑖 𝑎𝑖+1 = 𝑏𝑖+1 = 𝑢𝑖+1 = 𝑣𝑖+1 = 𝑠𝑖+1 = 𝑡𝑖+1 = Di+1 =
gerade
𝑎𝑖
 2 𝑏-𝑖
 2 2𝑢𝑖 2𝑣𝑖 2𝑠𝑖 2𝑡𝑖 4Di
gerade ungerade 𝑎𝑖
-2 𝑏𝑖 2𝑢𝑖 𝑣𝑖 2𝑠𝑖 𝑡𝑖 2Di
ungerade gerade 𝑎𝑖 𝑏-𝑖
 2 𝑢𝑖 2𝑣𝑖 𝑠𝑖 2𝑡𝑖 2Di
ungerade, 𝑎𝑖 𝑏𝑖
𝑎𝑖 −-𝑏𝑖
   2 𝑏𝑖 2𝑢𝑖 𝑢𝑖 +𝑣𝑖 2𝑠𝑖 𝑠𝑖 +𝑡𝑖 2Di
ungerade, 𝑏𝑖 𝑎𝑖
𝑎𝑖 𝑏-𝑖 − 𝑎-𝑖
   2 𝑢𝑖 +𝑣𝑖 2𝑣𝑖 𝑠𝑖 +𝑡𝑖 2𝑡𝑖 2Di

Um den Zusammenhang mit den ZOUT-Koeffizienten 𝛼,𝛽 Z in gcd(𝑎,𝑏) = 𝛼𝑎0 +𝛽𝑏0 herzustellen, stellen wir die Formeln 40 und 41 nach 𝑎𝑖 und 𝑏𝑖 um. Dazu werden beide Gleichungen mit den Linearfaktoren der jeweils anderen multipliziert und dann wechselweise voneinander subtrahiert.

pict

Schließt man den Fall aus, daß 𝑎0 und 𝑏0 gerade sind (Di = 2𝑖, vgl. Anmerkungen auf Seite §), dann kann für den letzten Iterationsschritt 𝑖 = 𝑘, in Abhängigkeit davon ob 𝑎𝑘 oder 𝑏𝑘 zuerst verschwindet, folgendermaßen konkretisiert werden:

pict

An diesem Punkt stellen wir jedoch fest, daß es sich bei den Größen 𝑢𝑘, 𝑣𝑘, 𝑠𝑘 und 𝑡𝑘 nicht um die Kofaktoren von gcd(𝑎,𝑏), sondern um eine Linearfaktordarstellung von 2𝑘 gcd(𝑎,𝑏) handelt.46

pict

Um aus 𝑡𝑘, 𝑣𝑘 und 𝑠𝑘, 𝑢𝑘 die ZOUT-Koeffizienten 𝛼 und 𝛽 zu bestimmen, sind zusätzliche Korrekturschritte nötig, welche in [15] auch Korrekturphase (oder Phase II) genannt werden. Ziel ist es dabei, die rechte Seite der letzten Gleichung durch 2𝑘 zu dividieren (oder in 𝑘 Schritten wiederholt durch 2). Da die linke Seite immer eine gerade Zahl ist, können folgende Schlußfolgerungen im Falle 𝑏𝑘 = 0 gezogen werden (falls 𝑎𝑘 = 0 war, äquivalent für 𝑡𝑘 𝑠𝑘 und 𝑣𝑘 𝑢𝑘):47

Algorithmus 5 Algorithmus 𝑑 = gcd(𝑎,𝑏) = 𝛼𝑎+𝛽𝑏 nach KALISKI
Require:   𝑎 ungerade 𝑏 ungerade {Phase I}
  (𝑎0,𝑢0,𝑠0) ⇐ (𝑎,1,0)
  (𝑏0,𝑣0,𝑡0) ⇐ (𝑏,0,1)
  𝑓 0 {Flag, daß anzeigt, ob schlußendlich 𝛼 oder 𝛽 negativ ist}
  𝑘 0
  while 𝑎𝑘 > 0 do
   if 𝑏𝑘 > 𝑎𝑘 then
   (𝑏𝑘,𝑣𝑘,𝑡𝑘)(𝑎𝑘,𝑢𝑘,𝑠𝑘) {gewährleistet 𝑎𝑘 𝑏𝑘}
   𝑓 𝑓 {invertiere Flag}
   end if
   if 𝑎𝑘 ungerade 𝑏𝑘 ungerade then
   (𝑎𝑘,𝑣𝑘,𝑡𝑘)⇐=(𝑎𝑘 𝑏𝑘,𝑣𝑘 +𝑢𝑘,𝑡𝑘 +𝑠𝑘) {𝑎𝑘 ist jetzt gerade, 𝑏𝑘 weiterhin ungerade}
   end if
   if 𝑎𝑘 gerade then
   (𝑎𝑘+1,𝑢𝑘+1,𝑠𝑘+1)⇐=(𝑎𝑘/2,2𝑢𝑘,2𝑠𝑘) {𝑎𝑘 gerade, 𝑏𝑘 ungerade}
   else
   (𝑏𝑘+1,𝑣𝑘+1,𝑡𝑘+1)⇐=(𝑏𝑘/2,2𝑣𝑘,2𝑡𝑘) {𝑎𝑘 ungerade, 𝑏𝑘 gerade}
   end if
   𝑘 𝑘 +1
  end while
  gcd(𝑎,𝑏) ⇐ 𝑏𝑘 {Teilergebnis 𝑑 = gcd(𝑎,𝑏)} {Phase II}
  𝑖 𝑘
  while 𝑖 > 0 do
   if 𝑠𝑘 ungerade 𝑢𝑘 ungerade then
   𝑠𝑘⇐=𝑠𝑘 +𝑡𝑘 {Addition von 𝑡𝑘 = 𝑏 (vgl. Bemerkung 3)}
   𝑢𝑘⇐=𝑢𝑘 +𝑣𝑘 {Addition von 𝑣𝑘 = 𝑎 (vgl. Bemerkung 3)}
   end if
   𝑠𝑘⇐=𝑠𝑘/2 {Korrektur 𝛼}
   𝑢𝑘⇐=𝑢𝑘/2 {Korrektur 𝛽}
   𝑖 𝑖 1
  end while
  (𝛼,𝛽)⇐=(𝑠𝑘,𝑢𝑘) {Wenn 𝑓 = 0, dann 𝛼 < 0, sonst 𝛽}

Als Ergebnis kann man Algorithmus 5 formulieren, wobei außerdem folgende Anmerkungen berücksichtigt wurden:

  1. Aus den Gleichungen 40 und 41 läßt sich im letzten Iterationsschritt (von Phase I)

    pict

    schlußfolgern, d. h. bei 𝑢𝑘 und 𝑠𝑘 handelt es sich im Fall 𝑏𝑘 = 0 (gleichermaßen für 𝑣𝑘, 𝑡𝑘 im Fall 𝑎𝑘 = 0) um die teilerfremden Faktoren

    pict
  2. Wegen der stetigen Reduktion von 𝑎𝑖 oder 𝑏𝑖 müssen die Linearfaktoren 𝑢𝑖, 𝑠𝑖, 𝑣𝑖 und 𝑡𝑖 in Phase I schrittweise anwachsen, denn nur so können 𝑎0 und 𝑏0 nach Gleichung 40 und 41 konstant bleiben. In [15, Theorem 1] wird bewiesen, daß keine dieser Größen während der Ausführung des Algorithmus den Maximalwert 2𝑎0 1 überschreitet (für 𝑎0 > 𝑏0).48
  3. Die in Phase II vorzunehmende Addition von 𝑎 bzw. 𝑏 kann (entsprechend Anmerkung 5 auf Seite §) ersetzt werden durch eine Addition von 𝑎0 bzw. 𝑏0.49

    pict

Algorithmus nach PENK [16, Exercise 4.5.2.39], [22, S. 14.4.3] Dieser Algorithmus stellt 𝑎𝑖+1 und 𝑏𝑖+1 als lineare Funktion von 𝑎𝑖 und 𝑏𝑖 dar, letztlich wird also von (𝑎0,𝑏0) auf (𝑎𝑖,𝑏𝑖) geschlossen.

pict

Vorteilhaft wirkt sich aus, daß im letzten Reduktionsschritt (wenn 𝑎𝑘 oder 𝑏𝑘 verschwindet) 𝑢𝑘 und 𝑣𝑘 bzw. 𝑠𝑘 und 𝑡𝑘 direkt die gesuchten ZOUT-Kofaktoren 𝛼, 𝛽 darstellen.

pict

Durch Einsetzen von 𝑎𝑖+1 und 𝑏𝑖+1 (entsprechend Tabelle 2) in die Gleichungen

pict

kann man für den jeweiligen Reduktionsfall die zugehörige Transformationen der Linearfaktoren ableiten. Wieder am Beispiel 𝑎𝑖+1 = (𝑎𝑖 𝑏𝑖)/2, 𝑏𝑖+1 = 𝑏𝑖 soll das Vorgehen veranschaulicht werden (𝑎𝑖 und 𝑏𝑖 sind ungerade, 𝑎𝑖 𝑏𝑖).

pict

Vergleich von linker und rechter Seite läßt den Schluß zu:

pict

Die anderen Kombinationen können genau nach demselben Schema abgeleitet werden. Tabelle 4 faßt die Ergebnisse in übersichtlicher Form zusammen.50

Tabelle 4: Linearfaktoren beim Algorithmus nach PENK
𝑎𝑖 𝑏𝑖 𝑎𝑖+1 = 𝑏𝑖+1 = 𝑢𝑖+1 = 𝑣𝑖+1 = 𝑠𝑖+1 = 𝑡𝑖+1 =
gerade ungerade 𝑎𝑖
--
 2 𝑏𝑖 𝑢 𝑖
--
 2 𝑣𝑖
--
 2 𝑠𝑖 𝑡𝑖
ungerade gerade 𝑎𝑖 𝑏 𝑖
-2 𝑢𝑖 𝑣𝑖 𝑠𝑖
2- 𝑡𝑖
2-
ungerade, 𝑎𝑖 𝑏𝑖
𝑎𝑖 −-𝑏𝑖
   2 𝑏𝑖 𝑢𝑖 −-𝑠𝑖
  2 𝑣𝑖-− 𝑡𝑖
   2 𝑠𝑖 𝑡𝑖
ungerade, 𝑏𝑖 𝑎𝑖
𝑎𝑖 𝑏-𝑖 − 𝑎-𝑖
   2 𝑢𝑖 𝑣𝑖 𝑠𝑖 −-𝑢𝑖
  2 𝑡𝑖 − 𝑣𝑖
  2

Dabei tritt allerdings wieder das bekannte Problem auf: Wie kann man die Ganzzahligkeit des jeweiligen Linearfaktoren bei der Halbierung wahren? Die Antwort haben wir schon beim vorangegangenen Algorithmus geliefert – indem die Ausgangsgleichungen 42 und 43 folgendermaßen erweitert:

pict

und dadurch ungerade Zahlen 𝑢𝑖, 𝑣𝑖 bzw. 𝑠𝑖, 𝑡𝑖 in gerade umwandelt.

Beschränken wir uns auf die Kombinationen nach Tabelle 4, in denen 𝑢𝑖 und 𝑣𝑖 verändert werden (äquivalent für 𝑢𝑖 𝑠𝑖 und 𝑣𝑖 𝑡𝑖). Für den Fall, daß 𝑎𝑖 gerade und 𝑏𝑖 ungerade ist (zweite Zeile in 4), können wir auf die Argumentation von Seite § zurückgreifen (Phase II der Methode nach KALISKI). Sie erlaubt uns die Subtraktion/Addition von 𝑎0 und 𝑏0 für den Fall, daß 𝑢𝑖 oder 𝑣𝑖 ungerade ist. Die Situation, daß 𝑎𝑖 und 𝑏𝑖 ungerade sind (vorletzte Zeile in 4), kann man durch gedankliche Verzögerung der Halbierung in den nächsten Iterationsschritt erklären. Wählt man als modifizierten Einzelschritt 𝑎𝑖+1 = 𝑎𝑖 𝑏𝑖 (und entsprechend 𝑢𝑖+1 = 𝑢𝑖 𝑠𝑖, 𝑣𝑖+1 = 𝑣𝑖 𝑡𝑖), so reduziert sich die Fragestellung wieder auf eine gerade Zahl 𝑎𝑖+1 = 𝑢𝑖+1𝑎0 +𝑣𝑖+1𝑏0, also auf den vorangegangenen Fall.

Als Ergebnis der Ausführungen kann man Algorithmus 6 formulieren. Der Vorteil des Algorithmus (gegenüber KALISKI’s) liegt vor allem darin, daß keine Korrekturphase nötig ist. Nachteilig für eine praktische Umsetzung ist die notwendige Vorzeichen-Arithmetik.

Algorithmus 6 Algorithmus 𝑑 = gcd(𝑎,𝑏) = 𝛼𝑎+𝛽𝑏 nach PENK
Require:   𝑏 ungerade
  (𝑎0,𝑢0,𝑣0) ⇐ (𝑎,1,0)
  (𝑏0,𝑠0,𝑡0) ⇐ (𝑏,0,1)
  𝑖 0
  while 𝑎𝑖 > 0 do
   if 𝑏𝑖 > 𝑎𝑖 then
   (𝑏𝑖,𝑠𝑖,𝑡𝑖)(𝑎𝑖,𝑢𝑖,𝑣𝑖) {gewährleistet 𝑎𝑖 𝑏𝑖}
   end if
   if 𝑎𝑖 ungerade 𝑏𝑖 ungerade then
   (𝑎𝑖,𝑢𝑖,𝑣𝑖)⇐=(𝑎𝑖 𝑏𝑖,𝑢𝑖 𝑠𝑖,𝑣𝑖 𝑡𝑖) {𝑎𝑖 ist jetzt gerade, 𝑏𝑖 weiterhin ungerade}
   end if
   if 𝑎𝑖 gerade then
   𝑎𝑖+1⇐=𝑎𝑖/2 {𝑎𝑖 gerade, 𝑏𝑖 ungerade}
   if 𝑢𝑖 gerade 𝑣𝑖 gerade then
   𝑢𝑖+1⇐=𝑢𝑖/2
   𝑣𝑖+1⇐=𝑣𝑖/2
   else
   𝑢𝑖+1⇐=(𝑢𝑖 +𝑏)/2
   𝑣𝑖+1⇐=(𝑣𝑖 𝑎)/2
   end if
   else
   𝑏𝑖+1⇐=𝑏𝑖/2 {𝑎𝑖 ungerade, 𝑏𝑖 gerade}
   if 𝑠𝑖 gerade 𝑡𝑖 gerade then
   𝑠𝑖+1⇐=𝑠𝑖/2
   𝑡𝑖+1⇐=𝑡𝑖/2
   else
   𝑠𝑖+1⇐=(𝑠𝑖 +𝑏)/2
   𝑡𝑖+1⇐=(𝑡𝑖 𝑎)/2
   end if
   end if
   𝑖 𝑖 +1
  end while
  (𝑑,𝛼,𝛽) ⇐ (𝑏𝑖,𝑠𝑖,𝑡𝑖) {𝑑 = gcd(𝑎,𝑏) = 𝛼𝑎+𝛽𝑏}

4.2 Lineare diophantische Gleichungen

Gleichungen mit ausschließlich ganzzahligen Lösungen 𝑥,𝑦,… Z nennt man diophantisch, wobei sie im linearen Fall (für zwei Variablen) die folgende Form haben:

𝑎𝑥 + 𝑏𝑦 = 𝑐,    mit 𝑎,𝑏,𝑐 ∈ N .
(44)

Solche Gleichungen haben genau dann eine Lösung, wenn der größte gemeinsame Teiler 𝑑 = gcd(𝑎,𝑏) den Wert 𝑐 teilt. Im Zusammenhang mit EUKLID’s Algorithmus wurde dies praktisch schon nachgewiesen – auch daß es unendlich viele solcher Lösungen gibt, kam in Abschnitt 4.1.1 zur Sprache.

Zuerst bemerken wir, daß die Differenz zweier Lösungen (𝑥1,𝑦1) und (𝑥2,𝑦2) die homogene Gleichung 𝑎𝑥 +𝑏𝑦 = 0 erfüllt.

pict

Mit 𝑎 = 𝑑𝑎 und 𝑏 = 𝑑𝑏 läßt sich sogar schreiben

--   --
𝑎 𝑥 + 𝑏𝑦 = 0

und es liegen die Lösungen (𝑥,𝑦) = (𝑛𝑏,𝑛𝑎), 𝑛 Z auf der Hand (Einsetzen ergibt 𝑎𝑥+𝑏𝑦 = 𝑎𝑛𝑏𝑏𝑛𝑎 = 0).51 Findet man jetzt noch eine partikuläre Lösung (𝑥2,𝑦2), dann ergeben sich alle weiteren zu:

pict

Partikuläre Lösungen (𝑥2,𝑦2) für 𝑎𝑥2 +𝑏𝑦2 = 𝑐 haben wir aber schon mittels der erweiterten GCD-Algorithmen zur Verfügung, denn mit der ZOUT’s Identität (den Index 2 jetzt weggelassen)

pict

gilt:

              --  --    --
𝑎𝑥 + 𝑏𝑦 = 𝑐 = 𝑑 𝑐 = 𝛼𝑐𝑎 + 𝛽𝑐𝑏 .

Eine partikuläre Lösung (𝑥2=∧𝑥, 𝑦2∧=𝑦) kann deshalb mit Hilfe der ZOUT-Kofaktoren 𝛼,𝛽 gegeben werden.

pict

Die Vielfalt aller Lösungen stellt sich dadurch wiefolgt dar:

pict

Für den Spezialfall 𝑑 = gcd(𝑎,𝑏) = 1 entartet die Formel zu:

pict

4.3 Chinesischer Restsatz

4.3.1 Hilfssatz für zwei Kongruenzen

Um sich dem Chinesischen Restsatz52 zu nähern, betrachten wir zunächst einen etwas einfacheren Fall, der die grundsätzliche Fragestellung jedoch beinhaltet: Welche natürliche Zahl 𝑧 erfüllt die folgenden beiden Kongruenzen:

pict

wenn vorausgesetzt wird, daß 𝑛,𝑚 > 0 relativ prim zueinander sind?

Um sie zu beantworten formulieren wir den Ausgangspunkt zuerst einmal entsprechend Restklassenbeziehung 22:

pict

Deren Darstellung als

𝑐 = 𝑏 − 𝑎 = 𝑥𝑛 − 𝑦𝑚
(48)

zeigt mit Verweis auf die Form von 44, daß es sich um eine lineare diophantische Gleichung handelt. Wegen gcd(𝑛,𝑚) = 1 könnte die zugehörige Lösungsformel 46 zwar sofort zur Anwendung kommen – naheliegend (da kurz) ist jedoch auch die Anwendung von ZOUT’s Identität. Denn multipliziert man gcd(𝑛,𝑚) = 𝛼𝑛+𝛽𝑚 = 1 mit 𝑐, dann kann aus

𝑐 = 𝑐(𝛼𝑛 + 𝛽𝑚)= 𝛼𝑛𝑐+ 𝛽𝑚 𝑐

durch Vergleich mit 48 sofort abgelesen werden, daß 𝑥 = 𝛼𝑐 und 𝑦 = 𝛽𝑐 gelten muß.53 Mit der Erkenntnis aus Formel 46, daß es sich bei den Lösungen einer linearen diophantischen Gleichungen immer um eine ganze Lösungsmenge handelt, resultiert:54

pict

Durch Einsetzen in Formel 47 erhält man

pict

und so eine geschlossene Darstellung für die Lösungsmenge.

𝑧𝑘 = 𝛼𝑏𝑛 + 𝛽𝑎𝑚 + 𝑘𝑚𝑛
(50)

Mit der von den Restklassen bekannten Kongruenz 23 für teilerfremde Zahlen:55

pict

können wir die Probe machen.

pict

Die Lösungsmenge 𝑧𝑘 bildet demzufolge eine Restklasse [𝑧]𝑚𝑛 .

𝑧 ≡ 𝛼𝑏𝑛 + 𝛽𝑎𝑚  (mod  𝑚𝑛)
(51)

4.3.2 Ein System von Kongruenzen

Nehmen wir jetzt ein ganzes System von Kongruenzen an:

pict

wobei gcd(𝑚𝑖,𝑚𝑘) = 1 für 𝑖 𝑘 gelten soll. Wie schon im Fall von zwei Kongruenzen stellt man die Frage, welche Lösung 𝑥 kongruent zu allen 𝑎𝑖 modulo 𝑚𝑖 ist (𝑖 = 1,…,𝑛). Ohne einen exakten mathematischen Beweis anzutreten, scheint als Schlußfolgerung aus Abschnitt 4.3.1 einleuchtend, daß die Lösung(en) 𝑥 eine Restklasse modulo 𝑚 = 𝑛𝑚𝑖 darstellen [16, 7].56

Bezeichnen wir mit 𝑚𝑖 das Produkt aller Moduli ausgeschlossen 𝑚𝑖, also

           𝑛
            𝑚 𝑗    𝑛
--   -𝑚-   𝑗=1----  
𝑚 𝑖 = 𝑚 𝑖 = 𝑚𝑖   =    𝑚𝑗,
                   𝑗𝑗=≠1𝑖

dann gilt wegen der Teilerfremdheit der einzelnen Moduli gcd(𝑚𝑖,𝑚𝑖) = 1 bzw. mit dem Satz von ZOUT:57

pict

Im Gegensatz dazu verschwindet 𝛼𝑘𝑚𝑘 mod 𝑚𝑖 für 𝑖 𝑘, denn 𝑚𝑖 ist als Faktor in 𝑚𝑘 enthalten. Die Orthogonalität beider Fälle kann mit Hilfe des KRONECKER-Symbols 𝛿𝑖𝑘 ausgedrückt werden:

                   ꎧ
  --               |||0     (𝑖 ≠ 𝑘)
𝛼𝑘𝑚𝑘 mod 𝑚 𝑖 = 𝛿𝑖𝑘 = |           .
                   |⎩1     (𝑖 = 𝑘)

Die endgültige Lösungsidee besteht nun darin, für jede Kongruenz 𝑖 den folgenden Ausdruck zu bilden:

∑︁𝑛      --          ∑︁𝑛
    𝛼𝑘𝑎𝑘𝑚 𝑘 mod 𝑚 𝑖 =  𝑎𝑘𝛿𝑖𝑘 mod 𝑚𝑖 = 𝑎𝑖 mod 𝑚𝑖 ≡ 𝑥 (mod 𝑚 𝑖)
 𝑘=1                 𝑘=1

Wie zu sehen, ist die Summe auf der linken Seite kongruent zu 𝑎𝑖 modulo 𝑚𝑖, was

    𝑛
   ∑︁       --
𝑥 ≡    𝛼𝑘𝑎𝑘𝑚 𝑘  (mod  𝑚)
   𝑘=1
(52)

als finales Ergebnis rechtfertigt.

Für den einfachen Fall 𝑛 = 2 von Abschnitt 4.3.1 kann man mit 𝑚1 = 𝑚2, 𝑚2 = 𝑚1 sowie

pict

relativ einfach Kongruenz 51 verifizieren.58

       --       --
𝑥 ≡ 𝛼1𝑎1𝑚 1 + 𝛼2𝑎2𝑚 2 = 𝛼1𝑎1𝑚2 + 𝛼2𝑎2𝑚1 = 𝛼1 𝑎1𝑚2 + 𝛽1𝑎2𝑚1 (mod 𝑚1 𝑚2)

4.4 Quadratwurzeln in F𝑝

4.4.1 Vorbetrachtungen

Das Bestimmen der Quadratwurzel kann man im Körper F𝑝 recht effizient mit dem TONELLI-SHANKS Algorithmus erledigen. Bevor man aber dazu übergehen kann den Algorithmus zu erläutern, muß man sich unbedingt über einige Fakten in Bezug auf das Quadrieren von Körperelementen klar werden. Ohne wesentlich an Allgemeinheit zu verlieren, betrachten wird dazu die multiplikative Gruppe Z𝑝 = (Z𝑝 \ {0}) und formulieren zuerst die folgenden Grundaussagen in Bezug auf:59

𝑦 = 𝑥2  (mod 𝑝)

  1. Aus der Beziehung 𝑦 = 𝑥2 (mod 𝑝) ersieht man sofort, daß immer zwei Elemente 𝑥,𝑥 genau zum selben 𝑦 führen – ein „Positives“ und ein „Negatives“: 𝑥′ ≡ −𝑥 (mod 𝑝).
  2. Da Z𝑝 genau 𝑝 1 Elemente enthält (besitzt die Ordnung |Z𝑝| = |Z𝑝| − 1 = 𝑝 1), können (𝑝 1)/2 Elemente 𝑦 Z𝑝 keine Quadratwurzel besitzen. Denn umgekehrt betrachtet sind ja die verfügbaren 𝑝 1 Elemente 𝑥 wegen der Paarbildung beim Quadrieren (welche zu (𝑝1)/2 Elementen 𝑦 führt) schon „aufgebraucht“.
  3. Für die (𝑝1)/2 Elemente 𝑦, welche der Beziehung 𝑦 = 𝑥2 (mod 𝑝) genügen, gilt wegen des kleinen Satzes von FERMAT (vgl. Abschnitt 3.3.2):

     𝑝−1    2 𝑝−1   𝑝−1
𝑦 2 = (𝑥 ) 2 = 𝑥    ≡ 1  (mod 𝑝).
    (53)

  4. Für die restlichen (𝑝1)/2 Elemente 𝑦, welche keine zugeordnete Quadratwurzel 𝑥 besitzen, gilt hingegen:60

    𝑦𝑝−21≡ − 1  (mod 𝑝).
    (54)

    Für einen kurzen Beweis nehmen wir uns ein bestimmtes (konstantes) Element 𝑦 heraus und betrachten die Zerlegung 𝑦 = 𝑎𝑥 (mod 𝑝), welche es in Z𝑝 immer geben muß: 𝑎 = 𝑥1𝑦 (mod 𝑝). Wenn man nun für 𝑥 alle möglichen Werte 1…𝑝 1 setzt, dann muß auch 𝑎 entsprechend variieren. Wegen:

    in Z𝑝 wird 𝑎 einerseits alle möglichen Werte 1…𝑝1 annehmen und andererseits wird jedes Produkt 𝑎𝑥 insofern doppelt vorkommen, daß 𝑎 und 𝑥 nur die Rolle getauscht haben. In Abbildung 3 sind mögliche Produkte für 𝑦 = 8 (hat keine Wurzel) und 𝑦 = 9 (Wurzeln sind ±3) beispielhaft in Z11 dargestellt (wobei gestrichelte Linien Produkte kennzeichnen, bei denen 𝑎 und 𝑥 nur die Rolle getauscht haben).

PIC (a) 𝑦 = 8 PIC (b) 𝑦 = 3)2 = 9
Abbildung 3: Beispiele für Produkte in Z11

Multiplizieren wir alle Produkte 𝑎𝑥 miteinander und schließen dabei die Doppelungen aus (d. h. berücksichtigen nur die Produkte in Abbildung 3a, welche mit durchgezogenen Linien dargestellt sind), dann hat man alle Elemente 𝑥 Z𝑝 miteinander multipliziert.

𝑝−1      𝑝−1    𝑝−1
2       2     2     𝑝−1
   𝑎𝑖𝑥𝑖 =   𝑎𝑖 ·   𝑥𝑖 =   𝑥𝑖 = (𝑝 − 1)!
𝑖=1      𝑖=1    𝑖=1     𝑖=1

Bei den (𝑝1)/2 Produkten 𝑎𝑖𝑥𝑖 handelt es sich aber genau um die Potenz

       𝑝−1    𝑝−1
  𝑝−1-  2     2
𝑦  2 =    𝑦𝑖 =   𝑎 𝑖𝑥𝑖
       𝑖=1     𝑖=1

und so kann man mit dem Satz von WILSON (siehe Formel 27) den Beweis abschließen:

𝑦𝑝−21= (𝑝 − 1)! ≡ −1 .

Noch bevor man also versucht die Quadratwurzel 𝑥 = √--
 𝑦 zu berechnen, kann man mit Hilfe des gerade eingeführten (EULER-) Kriteriums prüfen, ob diese überhaupt existiert. Die Nomenklatur für das EULER-Kriterium stammt allerdings von A.-M. LEGENDRE und wird als LEGENDRE-Symbol bezeichnet:

(  )         ꎧ|||
  𝑦- = 𝑦𝑝−21=  1    wenn 𝑦 eine Quadratwurzel in Z𝑝 besitzt;
  𝑝          ||− 1  wenn 𝑦 keine Quadratwurzel in Z𝑝 besitzt.
             ⎩
(55)

4.4.2 Der Spezialfall 𝑝 mod 4 = 3

Im speziellen Fall 𝑝 3 (mod 4) kann man eine sehr einfache Lösung für die Quadratwurzel 𝑥 = √ --
  𝑦 erhalten, sofern sie denn existiert [28, Theorem 9.3], [1, S. D.1.4]:

𝑥 = 𝑦𝑠+1  (mod  𝑝),
(56)

mit 𝑠 = (𝑝3)/4.

Ausgangspunkt für einen kurzen Beweis könnte die folgende Darstellung für das Modul 𝑝 sein:61

pict

Wird sie im Zusammenhang mit dem EULER-Kriterium von Gleichung 53 angewendet, dann bestätigt sich Formel 56 wiefolgt:

 2    2(𝑠+1)     2𝑠+1      𝑝−1
𝑥  = 𝑦     = 𝑦·𝑦    = 𝑦 ·𝑦 2 ≡ 𝑦   (mod  𝑝).
4.4.3 Der TONELLI-SHANKS Algorithmus

Idee Der TONELLI-SHANKS Algorithmus nach [33, 30] reduziert, ausgehend von einem Anfangswert 𝑥0 Z𝑝>2 , den Exponenten 2𝑡𝑖 im Ausdruck

(  )2𝑡𝑖
 𝑥2𝑖
  𝑦    ≡ 1  (mod 𝑝)
(57)

immer weiter, bis schließlich 𝑡𝑛 = 0 wird und deshalb 𝑥𝑛2 𝑦 (mod 𝑝) die gesuchte Lösung darstellt (siehe z. B. auch [24, S. 2.9], [7, S. 2.3.2]). Mit 2𝑡𝑖 soll es sich aber nicht um irgendeine Zweierpotenz handeln, sondern um die Ordnung des Elements 𝑧𝑖 𝑥𝑖2𝑦1 (mod 𝑝).

Es gilt also einen Algorithmus zu beschreiben, bei dem sowohl für den Startwert 𝑧0 als auch für alle Werte 𝑧𝑖 in

𝑧2𝑡𝑖≡ 1  (mod 𝑝)
 𝑖
(58)

die Ordnung |𝑧𝑖| = 2𝑡𝑖 einerseits (und überhaupt) eine Zweierpotenz ist und andererseits (auch noch) abnimmt.62

Startwerte Als Anfangswerte setzt man:

pict

Dabei entspricht der Wert 2𝑡0 nicht zwingendermaßen der Ordnung |𝑧0| = 2𝑡0, er befriedigt aber Kongruenz 58 grundsätzlich:

  1. Da es sich bei 𝑝 um eine Primzahl mit 𝑝 > 2 handeln soll (𝑝 ist zwingendermaßen ungerade), kann man

    𝑝− 1 = 2𝑟𝑠
    (59)

    setzen (mit 𝑟 1, maximal) und erhält so:

    𝑝 − 1
----- = 2𝑟−1𝑠 .
  2
  2. Soll die Quadratwurzel 𝑥 = √--
 𝑦 wirklich existieren (wovon wir ausgehen) dann gilt mit dem EULER-Kriterium 55:

    (  )
  𝑦- = 𝑦𝑝−21≡ 1  (mod  𝑝).
  𝑝
  3. Faßt man beide Punkte zusammen, dann bestätigt sich:

          (  ) 𝑟−1
  𝑡0′   𝑥2 2     (𝑦𝑠+1)2𝑟−1    𝑟−1    𝑝−1
𝑧20  =  -0     =  ----    ≡ 𝑦2  𝑠 ≡ 𝑦 2 ≡ 1  (mod  𝑝).
       𝑦          𝑦
    (60)

Interpretieren wir Kongruenz 60 jetzt mit dem Wissen aus Abschnitt 2.1.2, dann muß es sich bei 2𝑡0 entweder um die Ordnung |𝑧0| selbst oder aber um ein Vielfaches davon handeln: 2𝑡0 = 𝐾|𝑧0|. Deshalb können 𝐾 und |𝑧0| nur Zweierpotenzen sein (was 𝐾 = 1 nicht ausschließt), d. h. für die Ordnung kann man ohne weitere Bedenken |𝑧0| = 2𝑡0 ansetzen (mit 𝑡0 𝑡0). Um nun aus 𝑡0 den exakten Exponenten 𝑡0 bzw. die Ordnung |𝑧0| zu ermitteln, kann man 𝑧0 einfach so oft quadrieren bis (nach FERMAT’s kleinem Satz) die Bedingung 𝑧0|𝑧0| 1 (mod 𝑝) erfüllt ist.

Iteration Bevor wir zum iterativen Teil des Algorithmus übergehen können, benötigen wir noch die Mithilfe irgendeines (zufällig gewählten) Elements 𝛼 Z𝑝, welches keine Wurzel in Z𝑝 haben darf. Für 𝛼 muß das EULER-Kriterium 55 dann den Wert

( )
 𝛼- ≡ −1  (mod  𝑝)
 𝑝

annehmen. Aus diesem Element 𝛼 erzeugen wir ein neues Element 𝛽 = 𝛼𝑠 (mod 𝑝) mit den Eigenschaften:

Nun wird die Näherung schrittweise nach folgender Vorschrift verbessert:63

         2𝑟−𝑡𝑖−1
𝑥𝑖+1 = 𝑥𝑖 𝛽       (mod 𝑝),
(62)

wobei sich der Exponent 𝑡𝑖 jeweils um 1 verringert (𝑡𝑖+1 = 𝑡𝑖 1, mit 2𝑡𝑖+1 einem mglw. Vielfachen der Ordnung |𝑧𝑖+1|).

Um die Verringerung des Exponenten nachzuweisen bilden wir einfach 𝑧𝑖+12𝑡𝑖1 mit Hilfe von Iterationsformel 62:

 𝑡′𝑖+1  (       )2𝑡′𝑖+1  (      𝑟−𝑡𝑖−1   )2𝑡𝑖−1  (     )2𝑡𝑖−1 ( 𝑟−𝑡𝑖)2𝑡𝑖−1    𝑡𝑖−1  𝑟−1
𝑧2𝑖+1  = 𝑥2𝑖+1𝑦−1     = 𝑥2𝑖𝛽2·2    𝑦−1     = 𝑥2𝑖𝑦−1      𝛽2       = 𝑧2𝑖   𝛽2    (mod 𝑝).

Beide Faktoren auf der rechten Seite sind aber vom Wert 1 (mod 𝑝), was letztlich

  ′
𝑧2𝑡𝑖+1 ≡ 1  (mod 𝑝)
 𝑖+1

bedeutet. Zur Begründung folgende Argumentation:

Aus dem letzten Punkt ergibt sich die Notwendigkeit, daß man am Anfang des Iterationszyklus jedesmal die exakte Ordnung |𝑧𝑖| bzw. den zugehörigen Exponenten 𝑡𝑖 𝑡𝑖 bestimmt (vgl. auch die Erläuterungen zu den Startwerten).

Algorithmus Bevor wir in Algorithmus 7 alle Erkenntnisse zusammenfassen, noch zwei Hinweise zur Umsetzung:

  1. Die Berechnung des inversen Elements 𝑦1 kann man einmalig zu Beginn des Algorithmus durchführen.
  2. Setzt man für die Reduktion der Ordnung in jedem Schritt 𝛥𝑖 = 𝑡𝑖1 𝑡𝑖 und führt in Formel 62 die Abkürzungen

    pict

    ein, dann kann man auch 𝛾𝑖 rekursiv berechnen:

          𝑟−𝑡 −1+𝛥   (  𝑟−𝑡 −1)2𝛥𝑖    𝛥
𝛾𝑖 = 𝛽2 𝑖−1   𝑖 = 𝛽2  𝑖−1      = 𝛾2𝑖−𝑖1 .

    Um den korrekten Startwert 𝛾0 = 𝛽2𝑟𝑡01 zu erzielen, vergleichen wir jetzt noch die Werte für 𝑖 = 0:

     2𝑟−1−𝑡0   2𝛥0   2𝑡−1−𝑡0
𝛽      = 𝛾−1 = 𝛾−1

    und erhalten:

    pict

Algorithmus 7 Quadratwurzel eines Elements 𝑦 Z𝑝
Require:   𝑝 > 2
Ensure:   𝑥 = √--  𝑦
  𝑟,𝑠 aus 𝑝1 = 2𝑟𝑠, mit 𝑟 maximal
  repeat
   𝛼 zufälliges Element aus Z𝑝
  until 𝛼(𝑝1)/2 mod 𝑝 = 𝑝1 {EULER-Kriterium: 𝛼(𝑝1)/2 ≡ −1 (mod 𝑝)}
  𝛾 𝛼𝑠 mod 𝑝 {𝛾1 = 𝛽}
  𝑥 𝑦(𝑠+1)/2 mod 𝑝 {𝑥0}
  𝑦inv = 𝑦1 mod 𝑝
  𝑡 𝑟 1
  𝑡 aus 2𝑡 = ord(𝑥2𝑦inv mod 𝑝) {Ordnung von 𝑧0}
  while 𝑡 > 0 do
   𝛥 𝑡 𝑡
   𝛾 𝛾2𝛥 mod 𝑝 {𝛾𝑖 = 𝛽2𝑟𝑡𝑖1 }
   𝑥 𝑥𝛾 mod 𝑝
   𝑡 𝑡
   𝑡 aus 2𝑡 = ord(𝑥2𝑦inv mod 𝑝) {Ordnung von 𝑧𝑖 𝑥𝑖2𝑦1 (mod 𝑝)}
  end while {Probe (siehe auch [21, Appendix C]),
  anstatt zu Beginn das EULER-Kriterium (𝑦|𝑝) = 1 zu verifizieren}
  𝑦′ ⇐ 𝑥2 mod 𝑝
  if 𝑦= 𝑦 then
   return𝑦
  else
   returnkeine Lösung
  end if

4.5 Quadratische Gleichungen in F2𝑛

4.5.1 Problemstellung

Quadratische Gleichungen (mit 𝑎 0) der Form

𝑎𝑦2 + 𝑏𝑦 + 𝑐 = 0,  𝑎,𝑏,𝑐 ∈ F2𝑛

kann man bezüglich 𝑦 in F2𝑛 nicht so einfach lösen wie in R. Wie noch zu sehen sein wird, hat diese Gleichung in F2𝑛:

Zuersteinmal kann man sie unter der Voraussetzung 𝑎,𝑏 0 mit Hilfe der Substitution 𝑧 = 𝑎𝑦/𝑏 und der naheliegenden Abkürzung 𝛽 = 𝑎𝑐/𝑏2 in eine allgemeine Form überführen:

pict

Davon ausgehend können wir uns den mathematischen Grundlagen einer Lösung zuwenden [2, 31].

4.5.2 Trace

Zuallererst soll eine Hilfsformel eingeführt werden, welche in der einen oder anderen Form immer wieder benötigt wird.64 Dazu sei die folgende Summe 𝜆𝑖 für ein Element 𝛼 F𝑝𝑛 definiert und mit 𝑖 N indiziert (vorerst soll 𝑖 0 gelten):

     𝑖−∑︁1
𝜆  =    𝛼𝑝𝑘
 𝑖   𝑘=0

Dann berechnen wir unter Zuhilfenahme des „Anfänger-Traums“ nach Formel 33 bzw.  34 die 𝑝-te Potenz:

     [𝑖−∑︁ 1  𝑘]𝑝   𝑖∑︁−1(  𝑘)𝑝   𝑖∑︁−1  𝑘+1  ∑︁𝑖    𝑘    𝑖      𝑖∑︁−1  𝑘
𝜆𝑝𝑖 =     𝛼𝑝    =     𝛼𝑝    =    𝛼𝑝   =    𝛼𝑝  = 𝛼𝑝  − 𝛼 +   𝛼𝑝
      𝑘=0        𝑘=0         𝑘=0       𝑘=1               𝑘=0

und stellen fest:

 𝑝        𝑝𝑖            𝑖∑︁−1 𝑝 𝑘
𝜆𝑖 − 𝜆𝑖 = 𝛼 − 𝛼, mit 𝜆𝑖 =  𝛼   .
                        𝑘=0
(63)

Definition Der Trace ist die Summe der Konjugierten eines Elements im Körper F𝑝𝑛.

      𝑛∑︁−1  𝑝𝑖       𝑝    𝑝2   𝑝3        𝑝𝑛−1
tr(𝛼)=    𝛼   = 𝛼 + 𝛼  + 𝛼  + 𝛼  + ···+ 𝛼
       𝑖=0

Mit Formel 63 ist der Trace auch darstellbar als:

tr(𝛼)= 𝜆𝑛 .
(64)

Eigenschaften Mit Hilfe der Polynomdarstellung für ein Element 𝛼 F𝑝𝑛

    𝑛−∑︁ 1
𝛼 =    𝛼𝑗𝑥𝑗    (𝛼𝑗 ∈ F𝑝)
    𝑗=0

kann man einige interessante Eigenschaften und Beziehungen für den Trace ableiten:

  1. Aus den Formeln 63 und 64 ergeben sich mit dem kleinen Satz von FERMAT (𝛼𝑝𝑛 𝛼 = 0) die Beziehungen:

    pict

    d. h. der Trace ist eine lineare Abbildung F𝑝𝑛 F𝑝. Der Grund liegt ganz einfach darin, daß Gleichung 65 nur im Körper F𝑝 Gültigkeit hat (nicht in F𝑝𝑛) – und deshalb: tr(𝛼) ∈ F𝑝.

  2. Der Trace eines Elements wird nicht verändert, wenn man das Element vorher (mehrfach) zur Potenz 𝑝 potenziert:

    pict

    Warum dies so ist, erkennt man durch Anwendung der im Punkt 1 hergeleiteten Formel 65 sowie (wieder) des „Anfänger-Traums“ nach Formel 34:

                   [      ]𝑝
        𝑝       𝑛∑︁−1 𝑝 𝑖    𝑛∑︁−1( 𝑝𝑖)𝑝   𝑛∑︁−1  𝑝 𝑝𝑖      𝑝
tr(𝛼)= tr (𝛼)=     𝛼     =     𝛼     =    (𝛼 )  = tr(𝛼  ).
                𝑖=0        𝑖=0         𝑖=0
  3. Der Trace ist linear:

    1. tr(𝛼 +𝛽) = tr(𝛼) +tr(𝛽), mit 𝛼,𝛽 F𝑝𝑛

      In ausführlicher Schreibweise des Trace und (wieder) mit Formel 34 kann man auch dies schnell beweisen.

                 𝑛−∑︁ 1      𝑝𝑖  𝑛∑︁−1  𝑝𝑖   𝑝𝑖   𝑛∑︁−1  𝑝𝑖  𝑛∑︁−1 𝑝𝑖
tr(𝛼 + 𝛽)=    (𝛼 + 𝛽)  =    (𝛼  + 𝛽  )=    𝛼   +    𝛽  = tr(𝛼)+  tr(𝛽)
           𝑖=0           𝑖=0            𝑖=0      𝑖=0
    2. tr(𝑐𝛼) = 𝑐tr(𝛼), mit 𝑐 F𝑝, 𝛼 F𝑝𝑛

      Ausklammern von 𝑐 = 𝑐𝑝 = 𝑐𝑝𝑖 aus der Summendarstellung des Trace führt zu:

              𝑛∑︁−1        𝑛∑︁−1(      )  𝑛∑︁−1 (    )
tr(𝑐𝛼)=    (𝑐𝛼)𝑝𝑖 =    𝑐𝑝𝑖𝛼𝑝𝑖  =     𝑐𝛼𝑝𝑖 = 𝑐tr(𝛼).
        𝑖=0        𝑖=0           𝑖=0

Im Körper F2𝑛 Speziell im Binärkörper F2𝑛 entsteht aus Formel 63:

𝜆2 + 𝜆 𝑖 = 𝛼2𝑖 + 𝛼
 𝑖
(67)

und mit der Rekursion 𝜆𝑖 = 𝜆𝑖1 +𝛼2𝑖1 die (insbesondere für einen Berechnungsalgorithmus) interessante Beziehung:65

            𝑖−1
𝜆𝑖 = 𝜆𝑖−1 + 𝛼2 = 𝜆2𝑖−1 + 𝛼 .
(68)

Insbesondere aus den Punkten 1 und 2 auf Seite § ergeben sich weitere spezialisierte Eigenschaften:

  1. Quadrieren des Arguments 𝛼 in tr(𝛼) ändert nach Formel 66 nichts am Wert des Trace.

    tr(𝛼)= tr(𝛼2)=  tr(𝛼2𝑘),    𝑘 ∈ N
    (69)

  2. Das Potenzieren eines Trace ändert ebenfalls nichts an seinem Wert.66

     𝑖
tr(𝛼)= tr(𝛼),    𝑖 ∈ N
    (70)

    Grundlage des Beweises bilden die folgenden beiden Reduktionsfälle:

           ꎧ|||tr𝑖/2(𝛼)       (𝑖 gerade)
tr𝑖(𝛼)=
       ||tr(𝑖+1)/2(𝛼)    (𝑖 ungerade) .
       ⎩

    Sie erlauben es, den Exponenten iterativ bis auf 1 zu reduzieren, was letztlich zu tr 𝑖(𝛼) = tr(𝛼) führt.

    In einer kurzen Fallbetrachtung für 𝑖 gerade:

    tr𝑖(𝛼)= [tr𝑖/2(𝛼)]2 = tr𝑖/2(𝛼)

    bzw. 𝑖 ungerade (und so 𝑖 1 gerade):

    tr𝑖(𝛼)=  tr(𝛼)tr𝑖−1(𝛼)=  tr(𝛼)[tr(𝑖−1)/2(𝛼)]2 = tr(𝛼)tr(𝑖−1)/2(𝛼)= tr(𝑖+1)/2(𝛼)

    kann man die Begründung finden.

  3. Aus der Linearität des Trace und aus Formel 66 ergibt sich direkt:

    tr(𝛼2 + 𝛼 + 𝛽)= tr(𝛼2)+ tr(𝛼)+ tr(𝛽)= tr(𝛽).
               ︸ˉˉˉˉˉˉˉˉˉˉˉ︷︷ˉˉˉˉˉˉˉˉˉˉˉ︸
                     0
  4. Eine bemerkenswerte Formel, insbesondere im Zusammenhang mit der Lösung quadratischer Gleichungen in F2𝑛, ist die folgende:

                     2            𝑛∑︁−1 2𝑖          𝑖∑︁−1  2𝑘
𝛼tr(𝛽)+ 𝛽tr(𝛼)= 𝛾  + 𝛾, mit 𝛾 =  𝛽  𝜆𝑖 und 𝜆𝑖 =  𝛼   .
                              𝑖=1             𝑘=0
    (71)

    Ihr Beweis startet, indem man auf die äußere Summe den „Anfänger-Traum“ anwendet und danach mit 𝑖 := 𝑖 1 umindiziert. Mittels Formel 68 wird im Anschluß 𝜆𝑖12 substituiert.

         𝑛∑︁−1        ∑︁𝑛          ∑︁𝑛
𝛾2 =    𝛽2𝑖+1𝜆2=    𝛽2𝑖𝜆2  =    𝛽2𝑖(𝜆 + 𝛼)
     𝑖=1     𝑖   𝑖=2    𝑖−1  𝑖=2     𝑖

    Läßt man die Summe bei 𝑖 = 1 starten, dann ist zwar eine Korrektur um 𝛽2(𝜆1 +𝛼) vonnöten, letztlich ändert sich wegen 𝜆1 = 𝛼 aber überhaupt nichts (𝜆1 +𝛼 = 0). Jetzt noch den Summanden für 𝑖 = 𝑛 herausziehen, ausmultiplizieren und 𝛽2𝑛 = 𝛽 sowie 𝜆𝑛 = tr(𝛼) entsprechend Formel 64 berücksichtigen:

    pict

    Im letzten Schritt wird noch der Summand für 𝑖 = 0 hinzugenommen: 𝑖=1𝑛1𝛽2𝑖 = 𝛽+𝑖=0𝑛1𝛽2𝑖 = 𝛽+tr(𝛽) und man erkennt, daß der ganz rechte Term genau 𝛾 darstellt.

    pict

Algorithmus Die Idee für einen Algorithmus steckt in der Darstellung 64 für den Trace bzw. hinter Rekursionsformel 68.

Algorithmus 8 Trace eines Elements 𝛼 F2𝑛
Ensure:   𝜆 = tr(𝛼)
  𝜆 𝛼
  for 𝑖 = 1 to 𝑛1 do
   𝜆 𝜆2 +𝛼 {𝜆𝑖 = 𝜆𝑖12 +𝛼}
  end for
4.5.3 Halb-Trace

Der Halb-Trace ist eine wichtige Funktion für den Fall, daß 𝑛 für den Binärkörper F2𝑛 ungerade ist.

Definition

        (𝑛∑︁−1)/2      (𝑛−∑︁1)/2     (𝑛∑︁−1)/2(   )2𝑖
htr(𝛼)=        𝛼22𝑖 =      𝛼4𝑖 =       𝛼2𝑖
          𝑖=0         𝑖=0         𝑖=0

Eigenschaften

  1. Der Halb-Trace ist genauso linear wie der Trace.

    htr(𝛼 + 𝛽)= htr(𝛼)+ htr(𝛽)
  2. htr(𝛼2) = htr 2(𝛼), es gilt jedoch hier: htr(𝛼2) htr(𝛼), wehalb htr(𝛼) kein Element aus F2 (im Gegensatz zum Trace), sondern aus F2𝑛 ist.

    Einsetzen der Polynomdarstellung von 𝛼 führt in ähnlicher Art und Weise wie beim Trace zu:

             (𝑛∑︁−1)/2(  )22𝑖   (𝑛−∑︁1)/2 (   )2  [(𝑛−∑︁1)/2   ]2
htr(𝛼2)=        𝛼2    =       𝛼22𝑖  =        𝛼22𝑖  = htr2(𝛼)
           𝑖=0            𝑖=0             𝑖=0
  3. htr(𝛼2) +htr(𝛼) = 𝛼 +tr(𝛼)

    Etwas ausführlicher

    pict

    Umindizierung der beiden Summen mit 𝑙 := 2𝑖 +1 bzw. 𝑙 := 2𝑖 führt unter zusätzlicher Berücksichtigung von 𝛼2𝑛 = 𝛼 zum Ergebnis:

    pict
  4. Aus den beiden vorangegangenen Punkten ergibt sich:

                2              2
𝛼 + tr(𝛼)= htr(𝛼)+ htr(𝛼)= 𝛾  + 𝛾
    (72)

Algorithmus Der Algorithmus arbeitet ähnlich wie beim Trace (vgl. Algorithmus 8), außer daß der zusätzlichen Potenzierung Rechnung getragen wird.

Algorithmus 9 Halb-Trace eines Elements 𝛼 F2𝑛
Ensure:   = htr(𝛼)
  0
  for 𝑖 = 0 to (𝑛1)/2 do
   2
   2 +𝛼
  end for
4.5.4 Lösung

Ist 𝛽 = 0 dann sind die Lösungen 0 und 1.

Im allgemeinen gilt:

pict

d. h. eine Voraussetzung für die Existenz der zwei Lösungen ist tr(𝛽) = 0.

Für den Spezialfall, daß 𝑛 ungerade ist, kann man mit der Grundvoraussetzung tr(𝛽) = 0 aus Formel 72 direkt eine Lösung der quadratischen Gleichung ablesen:67

htr2(𝛽)+ htr(𝛽)= 𝛽
(73)

Mit htr 2(𝛽) +htr(𝛽) = [htr(𝛽) +1]htr(𝛽) sind die zwei Lösungen demzufolge 𝑧1 = htr(𝛽) und 𝑧2 = htr(𝛽) +1.

Ist 𝑛 jedoch gerade (bzw. im allgemeinen Fall), dann besteht eine Berechnungsmöglichkeit durch Anwendung von Formel 71. Setzt man nämlich als Grundvoraussetzung tr(𝛽) = 0, dann gilt:

                     𝑛∑︁−1             𝑖∑︁−1
𝛽tr(𝛼)= 𝑧2 + 𝑧, mit 𝑧 = 𝛽2𝑖𝜆𝑖 und 𝜆𝑖 =  𝛼2𝑘
                     𝑖=1             𝑘=0

d. h. findet man ein Element 𝛼 mit tr(𝛼) = 1, wodurch

𝛽 = 𝑧2 + 𝑧

dann kann man die Lösung 𝑧 aus diesem Element 𝛼 berechnen. Glücklicherweise besitzt im Mittel die Hälfte aller Elemente 𝛼 F2𝑛 einen Trace von 1, so daß man 𝛼 durchaus zufällig wählen kann (mit 50% Wahrscheinlichkeit für tr(𝛼) = 1).

Algorithmus Für den allgemeinen Fall (bzw. wenn 𝑛 gerade ist) kann man auf Algorithmus 10 zurückgreifen, um die quadratische Gleichung in F2𝑛 zu lösen [1, 13].

Beide Summen können vereint werden, wenn man 𝜆𝑖 iterativ in der äußeren Summe mitberechnet (nach derselben Methodik wie in Algorithmus 8), was dann im letzten Durchlauf 𝜆𝑛 = tr(𝛼) ergibt.

Und es gilt ja nach Formel 71, unter der Voraussetzung tr(𝛽) = 0 und tr(𝛼 = 1), immer:

                 𝑛∑︁−1  𝑖          ∑︁𝑖−1   𝑘
𝛾 = 𝛽 + 𝛾2, mit 𝛾 = 𝛽2 𝜆𝑖 und 𝜆𝑖 =  𝛼2
                  𝑖=1             𝑘=0

Algorithmus 10 Lösung der quadratischen Gleichung in F2𝑛
Ensure:   𝑧 = 𝑖=1𝑛1𝛽2𝑖𝜆𝑖, mit 𝜆𝑖 = 𝑘=0𝑖1𝛼2𝑘
  repeat
   𝛼 zufälliges Element aus F2𝑛
   𝑧 0
   𝜆 𝛼 {𝜆1 = 𝛼}
   for 𝑖 = 1 to 𝑛1 do
   𝑧 𝑧2 +𝜆2𝛽 {𝑧 = 𝑧2 +𝛽 für 𝑖 = 𝑛1 (bzw. 𝜆𝑛 = tr(𝛼) = 1)}
   𝜆 𝜆2 +𝛼 {𝜆𝑖 = 𝜆𝑖12 +𝛼}
   end for
  until 𝜆 = 1 {tr(𝛼) = 1}

Optimierung Schreibt man dazu unter Zuhilfenahme der Polynomdarstellung für das Element 𝛼 und noch unter Berücksichtigung von Formel 33:

       𝑛∑︁−1 𝑛∑︁−1     2𝑖  𝑛∑︁−1𝑛∑︁−1          𝑛∑︁−1𝑛∑︁−1   (   )
tr(𝛼)=     ⎛⎜   𝛼 𝑥𝑗⎞⎟  =       (𝛼 𝑥𝑗)2𝑖 =      𝛼2𝑖 𝑥2𝑖 𝑗 .
       𝑖=0 𝑗=0 𝑗       𝑖=0𝑗=0  𝑗       𝑖=0𝑗=0 𝑗
          ⎝       ⎠

Umsortieren der Summen und mit 𝛼𝑗𝑙 = 𝛼𝑗 in F2 und dann wieder mit Formel 33

      𝑛−1   𝑛−1(   )   𝑛−1  𝑛−1        𝑛−1
      ∑︁     ∑︁    2𝑖𝑗   ∑︁    ∑︁   (𝑗)2𝑖  ∑︁        𝑗
tr(𝛼)=     𝛼𝑗    𝑥    =    𝛼𝑗    𝑥    =    𝛼𝑗 tr(𝑥 )
       𝑗=0   𝑖=0        𝑗=0   𝑖=0        𝑗=0

Den Wert für tr(𝑥𝑗) kann man vorausberechnen.

4.6 MONTGOMERY-Potenzierung

Bei der Methode nach MONTGOMERY handelt es sich eigentlich um eine Multiplikationsmethode, bei der die Modulo-Reduktion des (Zwischen-) Ergebnisses ohne echte Langzahldivision erfolgen kann [23], [7, S. 9.2.1], [11, S. 2.2.4]. Da allerdings zuerst eine Transformation beider Faktoren in den MONTGOMERY-“Raum“ vorgenommen werden muß (welche zwei Modulo-Division erfordert) und außerdem einmal der erweiterte GCD-Algorithmus bemüht werden muß, kommen die Geschwindigkeitsvorteile nur bei der Potenzierung wirklich zum tragen.

Um einen leicht verständlichen Zugang zu finden, konzentrieren wir uns auf eine einzelne Multiplikation 𝑐 = 𝑎𝑏 (mod 𝑚). Dazu soll eine Zahl 𝑟 vorausgesetzt werden, die keinen gemeinsamen Teiler mit dem Modul 𝑚 hat und für die 𝑟 > 𝑚 gewährleistet ist. Die MONTGOMERY-Multiplikation kann man nun, unter der Voraussetzung gcd(𝑟,𝑚) = 1 (bzw. mit dem Satz von ZOUT 𝛼𝑟𝛽𝑚 = 1), in folgenden Einzelschritten darstellen:

  1. Berechnung der ZOUT-Koeffizienten 𝛼,𝛽 mit Hilfe des erweiterten euklidischen Algorithmus;
  2. Eingangstransformation der Faktoren 𝑎 und 𝑏 zu â = 𝑎𝑟 mod 𝑚 und ˆ𝑏 = 𝑏𝑟 mod 𝑚 (eine normale Modulo-Division);
  3. (Wiederholte) Multiplikation im MONTGOMERY-Bereich:

    1. Berechnung des Produkts 𝑥 = â · 𝑏ˆ (man beachte, daß hierbei keine Modulo-Reduktion vorgenommen wird);
    2. MONTGOMERY-Reduktion von 𝑥 = (𝑎𝑟 mod 𝑚)·(𝑏𝑟 mod 𝑚) zu ĉ = 𝑎𝑏𝑟 mod 𝑚 = 𝑐𝑟 mod 𝑚;

      Die nötige Korrektur68 ĉ = M(𝑥,𝑟,𝑚) = 𝑥𝑟1 mod 𝑚 führt zu einer MONTGOMERY-Darstellung für 𝑐 (als Voraussetzung für den nächsten Teilschritt).69

    3. Eine weitere (optionale) Multiplikationen im MONTGOMERY-“Raum“, die ĉ als einen der Faktoren verwendet;
  4. Rücktransformation des Ergebnisses ĉ zu 𝑐 = ĉ𝑟1 mod 𝑚, ebenfalls eine MONTGOMERY-Reduktion: 𝑐 = M(ĉ,𝑟,𝑚).

MONTGOMERY-Reduktion Zur Herleitung von MONTGOMERY’s effizienter Berechnungsmethode für M(𝑥,𝑟,𝑚) = 𝑥𝑟1 mod 𝑚 wählen wir als Ausgangspunkt:

pict

Subtraktion beider Gleichungen ergibt

pict

was mit gcd(𝑟,𝑚) = 𝛼𝑟 𝛽𝑚 = 1 zu

𝑚(𝛽𝑥 mod 𝑟)+ 𝑥 = (𝑣− 𝑢)𝑟𝑚+ 𝑟(𝛼𝑥 mod 𝑚)

führt.70

Mit dem Wissen, daß es sich bei 𝛼 um das multiplikativ inverse Element von 𝑟 im Restklassensystem modulo 𝑚 handelt (𝛼 = 𝑟1 (mod 𝑚), 𝛽 = 𝑚1 (mod 𝑟) ), stellen wir noch um:

𝛼𝑥 mod 𝑚 = 𝑚(𝛽-𝑥 mod-𝑟)-− (𝑣-−-𝑢)𝑟𝑚-+-𝑥
                       𝑟

und gewinnen letztlich MONTGOMERY’s Reduktionsformel.

                        𝑚(𝛽𝑥 mod 𝑟)+ 𝑥
M( 𝑥,𝑟,𝑚)=  𝑥𝑟−1 mod 𝑚 = ---------------− (𝑣− 𝑢)𝑚
                               𝑟
(74)

Praktisch benötigt man 𝑢 und 𝑣 nicht, sondern geht meist nach folgendem Algorithmus vor:

Algorithmus 11 MONTGOMERY-Reduktion
Ensure:   𝑦 = 𝑥𝑟1 mod 𝑚
  𝑡 𝛽𝑥 mod 𝑟
  𝑦 𝑚𝑡 + 𝑥 ------   𝑟
  if 𝑦 𝑚 then
   𝑦 𝑦𝑚
  end if

Bei geschickter Wahl von 𝑟 zum Beispiel als 𝑟 = 2𝑠 sind für alle (Modulo-) Divisionen in Formel 74 nur logische oder Schiebeoperationen nötig.71 Um gcd(2𝑠,𝑚) = 1 zu garantieren ist die einfachste Bedingung die, 𝑚 als ungerade vorauszusetzen.72