ELBA (Euklid-Lagrange-Berlekamp

Werbung
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.
Herunterladen