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.