Das Prinzip der RSA-Kryptographie In der Vorlesung wurde am

Werbung
Das Prinzip der RSA-Kryptographie
In der Vorlesung wurde am 22.11. die folgende Variante des kleinen Satzes von Fermat
gezeigt:
Satz. Es seien p eine Primzahl und a ∈ Z sowie k ∈ N beliebige weitere Zahlen. Dann
ist p ein Teiler von ak(p−1)+1 − a.
Man könnte dafür auch sagen: für jede Primzahl p ist die Abbildung
f : Z/pZ −→ Z/pZ, f (x) := xk(p−1)+1 ,
die Identität auf Z/pZ.
Nun betrachten wir zwei Primzahlen p 6= q und bilden deren Produkt N := p · q. Dann
gilt für jede ganze Zahl a und jedes natürliche k :
• Die gegebene Primzahl p teilt ak(q−1)(p−1)+1 − a (verwende k(q − 1) anstelle von k
im obigen Satz).
• q teilt ak(q−1)(p−1)+1 − a (verwende k(p − 1) anstelle von k und q anstelle von p
im obigen Satz).
Da wir p 6= q voraussetzen, ist damit auch N = pq ein Teiler von a(q−1)(p−1)+1 − a, und
das heißt wieder, dass die Abbildung
g : Z/N Z −→ Z/N Z, g(x) := xk(q−1)(p−1)+1 ,
die Identität auf Z/N Z ist.
In der RSA-Kryptographie verwendet man solche Ringe Z/N Z als Alphabet, und der
Trick ist der, dass man die Abbildung g als Komposition zweier Abbildungen schreibt,
deren eine dann den Prozess der Verschlüsselung liefert, während ich mir die andere zum
Entschlüsseln reserviere. Konkreter sieht das so aus.
Ich wähle mir zwei Primzahlen p 6= q und setze N := p · q. Weiter setze ich ϕ(N ) :=
(p − 1) · (q − 1). Nun erfinde ich eine natürliche Zahl e, die zu ϕ(N ) teilerfremd ist1 , teile
aller Welt N und e mit und sage allen, die mir eine Botschaft schicken wollen: wenn Ihr
mir die Botschaft x ∈ Z/N Z mitteilen wollt und niemand sonst soll dies wissen, dann
schickt mir bitte xe .
Dann kann ich aus der mitgeteilten Botschaft das x gezielt rekonstruieren, aber niemand
sonst. Denn:
Niemand außer mir kennt ϕ(N ), wenn p und q nicht allzu klein sind, denn es ist sehr
langwierig, eine solche große Zahl N in ihre Primfaktoren zu zerlegen. Daher bleibt es
mir vorbehalten, den folgenden Trick anzuwenden (wenn nicht e gerade 1 ist. . . ).
Da e und ϕ(N ) teilerfremd sind, gibt es – siehe den Hilfssatz unten oder auch die Diskussion von (Z/ϕ(N )Z)× unter Punkt 3.1.8 aus der Vorlesung – ganze Zahlen d und b ,
sodass
de + bϕ(N ) = 1
1
Das heißt: Wenn die natürliche Zahl g ≥ 1 ein Teiler sowohl von e als auch von ϕ(N ) ist, dann ist
g = 1.
gilt. Dabei können wir (d, b) auch ersetzen durch (d + tϕ(N ), b − te) für eine beliebige
ganze Zahl t, und insbesondere können wir b negativ und d positiv voraussetzen. Dann
aber finden wir
(xe )d = xde = x−bϕ(N )+1 = x
nach unseren obigen Überlegungen, also kann ich x aus xe rekonstruieren.
Beispiel: Wir nehmen p = 13 und q = 37, daher sind N = 481 und ϕ(N ) = 432.
Weiter sei e = 5. Dann gilt zum Beispiel
5 · 173 = 865 = 2 · 432 + 1.
Wenn mir jemand die Botschaft 7 ∈ Z/481Z schicken will, dann übermittelt er diese als
75 = 16807 = 453 + 34 · 481 ≡ 453 (mod 481),
woraus ich flugs die ursprüngliche Botschaft
453173 = . . .
zurückrechnen möchte, aber nur modulo 481. Dazu sollte ich tunlichst nicht in den ganzen
Zahlen diese Potenz ausrechnen, sondern intelligent in Z/481Z. Das geht zum Beispiel
so: ich schreibe die natürliche Zahl 173 binär, also als
173 = 128 + 32 + 8 + 4 + 1,
und nun berechne ich sukzessive die Potenzen von 453 mit Zweierpotenzen als Exponent,
aber nur modulo 481:
4531
4532
4534
4538
45316
45332
45364
453128
= 453
= 205209 = 303 + 426 · 481 ≡ 303 (mod 481),
≡ 419 (mod 481),
≡ 4192 ≡ 622 ≡ 477 (mod 481),
≡ 4772 ≡ (−4)2 ≡ 16 (mod 481),
≡ 162 ≡ 256 (mod 481),
≡ 147 (mod 481),
≡ 1472 ≡ 445 (mod 481).
Dann ergibt sich
453173 = 453128+32+8+4+1
= 453128 · 45332 · 4538 · 4534 · 4531
≡ 451 · 256 · 477 · 419 · 453 ≡
≡ 30 · 28 · 256 · 3 · 62 ≡ · · · ≡
≡ 7 (mod 481).
All dies lässt sich angeblich wunderbar von einem Computer erledigen.
Um auch das Auffinden von b und d programmierbar zu machen verwendet man zum
Beispiel den folgenden Induktionsbeweis, der einen Algorithmus nahelegt.
Hilfssatz. Es seien e, ϕ zwei teilerfremde natürliche Zahlen. Dann gibt es ganze Zahlen
d, b, sodass
de + bϕ = 1.
Beweis. Wir machen vollständige Induktion nach dem Maximum von e und ϕ . Da e und
ϕ nicht beide 0 sind (sonst wäre ja 1728 > 1 ein gemeinsamer Teiler) ist das Maximum
mindestens 1, was wir benutzen als
Induktionsanfang: Für max(e, ϕ) = 1) ist die Aussage klar.
Induktionsvoraussetzung: Für die natürliche Zahl m > 0 sei die Aussage wahr für
alle Paare (e, ϕ), deren Maximum nicht größer als m ist.
Induktionsschritt ( m
m + 1 ): Wenn (e, ϕ) teilerfremd mit Maximum m + 1 sind,
dann sind e, ϕ beide nicht 0, denn sonst wäre m + 1 > 1 ein gemeinsamer Teiler im
Widerspruch zur Teilerfremdheit.
Außerdem gilt e 6= ϕ aus dem selben Grund.
Wenn nun e < ϕ gilt, so setze f := ϕ − e. Dann ist max(e, f ) < ϕ, also
max(e, f ) ≤ m.
Daneben sind e und f auch teilerfremd, denn wenn g ≥ 1 ein gemeinsamer natürlicher
Teiler von e und f ist, dann teilt g auch ϕ = f + e. Also ist g = 1.
Daher können wir die Induktionsvoraussetzung für (e, f ) benutzen: es gibt b, d ∈ Z,
sodass de + bf = 1. Dann aber folgt
1 = de + bf = de + b(ϕ − e) = (d − b)e + bϕ,
und wir haben die gewünschte Behauptung für max(e, ϕ) gezeigt, da mit d und b auch
d − b eine ganze Zahl ist.
Bemerkung: Dieser Hilfssatz zeigt auch, dass es für natürliche Zahlen e, f mit größtem
gemeinsamen Teiler g > 0 ganze Zahlen b, d gibt mit de + bf = g. Denn e/g, f /g sind
ja teilerfremd, und ich kann daher die Eins als
1 = de/g + bf /g
schreiben, was sich wunderbar mit g durchmultiplizieren lässt.
Das rekursive Verfahren zum Auffinden von b und d aus dem Induktionsbeweis ist eine
Basisversion des euklidischen Algorithmus.
Herunterladen