ELBA (Euklid-Lagrange-Berlekamp-Algorithmus) Grundidee: Jeder gemeinsame Teiler t von zwei Zahlen a, b ∈ ganzzahligen Linearkombination aus a und b, denn es gilt: ∧ a = αt ⇒ b = βt Z ist auch ein Teiler von jeder xa + yb = (xα + yβ)t Insbesondere gilt für λ = b ab c: • Jeder gemeinsame Teiler von a und b teilt auch a − λb. • Jeder gemeinsame Teiler von b und a − λb teilt auch a, denn a = λb + (a − λb). Damit folgt: ggT(a, b) = ggT(b, a − λb) = ggT(b, a mod b) Euklidischer Algorithmus: Gegeben a, b ∈ Z, lässt sich ggT(a, b) nun folgendermaßen iterativ berechnen: a falls b = 0 ggT(a, b) = ggT(b, a mod b) sonst Beispiel: ggT(697, 97) = ggT(97, 18) = ggT(18, 7) = ggT(7, 4) = ggT(4, 3) = ggT(3, 1) = ggT(1, 0) = 1 Erweiterter euklidischer Algorithmus (ELBA): Im ersten Schritt führen wir einfach den euklidischen Algorithmus durch. Die rote Eins ist das Ergebnis: 697 97 18 = 697 mod 97 7 = 97 mod 18 4 = 18 mod 7 3 = 7 mod 4 1 = 4 mod 3 0 = 3 mod 1 Da jedes Zwischenergebnis eine Linearkombination der beiden vorhergehenden Zwischenergebnisse ist, kann man das Endergebnis 1“ grundsätzlich auch als ganzzahlige Linearkombination der ” Eingaben 697“ und 97“ darstellen. Um die konkreten Werte hierfür zu berechnen, ergänzen wir ” ” unsere Tabelle zunächst folgendermaßen: 697 97 18 7 4 3 1 0 7 = 697 97 j k 97 5 = 18 j k 2 = 18 7 j k 1 = 47 j k 1 = 34 j k 3 = 13 j k 697 = 1 · 697+ 0 · 97 97 = 0 · 697+ 1 · 97 18 = ? · 697+ ? · 97 7 = ? · 697+ ? · 97 4 = ? · 697+ ? · 97 3 = ? · 697+ ? · 97 1 = ? · 697+ ? · 97 Die Werte für die Fragezeichen können wir nun wie folgt von oben nach unten iterativ berechnen: .. . x y z = x mod y .. . λ= j x y k x= αx · 697+ βx · 97 y= αy · 697+ βy · 97 z = x − λ · y = (αx − λ · αy ) · 697+(βx − λ · βy ) · 97 Damit sieht die vervollständigte Tabelle so aus: 697 97 18 7 4 3 1 0 7 5 2 1 1 3 1 0 1 -5 11 -16 27 0 1 -7 36 -79 115 -194 Aus der vorletzten Zeile können wir jetzt direkt ablesen: ggT(697, 97) = 1 = 27 · 697 − 194 · 97 Anwendung: Wir benötigen den ELBA, um für gegebene teilerfremde Zahlen a, b ∈ Z das Inverse von a modulo b zu berechnen. Der ELBA liefert als Ergebnis r, s ∈ Z, sodass ggT(a, b) = r · a + s · b. Es gilt also: =1 ≡0 mod b z }| { z}|{ r · a = ggT(a, b) − s · b = 1 mod b und damit a−1 = r mod b r·a = 1 s · b = ggT(a, b) − |{z} | {z } mod a und damit b−1 = s mod a =1 ≡0 mod a Für unser obiges Zahlenbeispiel bedeutet dies: 97−1 = −194 = 503 mod 697 und 697−1 = 27 mod 97 Die Berechnung modularer Inverser wird u. A. im ElGamal-Verfahren zur Entschlüsselung (m = −1 c · g a·b mod p) und bei der RSA-Schlüsselgenerierung (d = e−1 mod ϕ(n)) benötigt.