RSA

Das Symmetrische-Schlüssel-Problem

Wird der Schlüssel beim Austausch abgefangen, so ist die gesamte Verschlüsselung wertlos. Lange Zeit galt diese Sicherheitslücke als unvermeidbar. Es gibt aber auch Verschlüsselungen, die ganz ohne unsicheren Schlüsselaustausch auskommen:

Wir denken uns für eine erste Idee, dass eine Kiste geschickt wird, die man mit einem Vorhängeschloss abschliessen kann. Dabei wird zwar die Nachricht mehrfach hin und her geschickt, es wird aber kein Schlüssel ausgetauscht.

Das geht so, wenn Alice Bob eine verschlüsselte Nachricht schicken möchte:

  1. Alice verschliesst die Kiste mit ihrem Schloss und schickt sie Bob.

  2. Bob verschliesst die Kiste ein zweites Mal mit seinem Schloss und schickt sie Alice zurück.

  3. Alice entfernt ihr Schloss mit ihrem Schlüssel und schickt die Kiste wieder an Bob.

  4. Bob kann die Kiste mit seinem Schlüssel öffnen.

Exercise 1: Kisten verschicken

Das Verfahren geht natürlich einfacher, ohne die Kiste hin und her schicken zu müssen. Nämlich ...

Solution

Bob könnte Alice beispielsweise ein offenes Vorhängeschloss, dessen Schlüssel er besitzt, schicken.

Das Diffie-Hellman-Merkle-Verfahren

Im Jahr 1976 hatte Hellman die Idee für ein Konzept zum Schlüsselaustausch, das auf dem oben genannten Prinzip aufbaut. Es erlaubt Alice und Bob, einen Schlüsselaustausch vorzunehmen, ohne sich dazu treffen zu müssen.

Example 1
  • Alice und Bob wählen gemeinsam eine Primzahl pp und eine Primitivwurzel gZpg\in\mathbb{Z}^\ast_p.
  • Alice wählt eine geheime Zahl aZpa \in \mathbb{Z}_p^*
    Bob wählt eine geheime Zahl bZpb \in \mathbb{Z}_p^*

Sie berechnen jeweils ihren "öffentlichen Schlüssel":

  • Alice: A=gamodpA = g^a \mod p
  • Bob: B=gbmodpB = g^b \mod p

Diese Werte AA und BB werden öffentlich übermittelt; es ist praktisch unmöglich, daraus aa oder bb zu berechnen.

Nun berechnen beide den gemeinsamen Schlüssel KK:

  • Alice: KA=BamodpK_A = B^a \mod p
  • Bob: KB=AbmodpK_B = A^b \mod p

Es ist KA=KBK_A = K_B; dieser Schlüssel KK kann nun für die symmetrische Verschlüsselung verwendet werden.

ProofKA=Bamodp=(gb)amodp=gbamodp=gabmodp=(ga)bmodp=Ab=KB;K_A = B^a \mod p = (g^b)^a \mod p = g^{ba} \mod p = g^{ab} \mod p = (g^a)^b \mod p = A^b = K_B;

daher: K=KA=KBK = K_A = K_B

Example 2

Gegeben:

  • p=31p = 31
  • g=2g = 2
  • a=3a = 3
  • b=6b = 6

Berechnung:

  • A=23mod31=8A = 2^3 \mod 31 = 8
  • B=26mod31=64mod31=2B = 2^6 \mod 31 = 64 \mod 31 = 2

Schlüsselberechnung:

  • KA=Bamod31=23=8K_A = B^a \mod 31 = 2^3 = 8
  • KB=Abmod31=86mod31=262144mod31=8K_B = A^b \mod 31 = 8^6 \mod 31 = 262144 \mod 31 = 8

Beide erhalten denselben Schlüssel: K=8K = 8

Betrachte noch folgende Überlegungen: Falls Eve den Wert B=2B = 2 (oder A=8A = 8) abfängt, muss sie versuchen, den Exponenten bb (bzw. aa) durch Ausprobieren zu finden.

Angenommen

2xmod31=22^x \mod 31 = 2

Schon der erste Versuch mit x=1x = 1 liefert das korrekte Resultat: 21mod31=22^1 \mod 31 = 2. Das bedeutet: Eve findet irgendein gültiges xx, aber nicht notwendigerweise das ursprünglich gewählte b=6b = 6.

Oder, falls man keine Primitivwurzel wählt, hat man die Schwachstelle, dass die Werte 2xmod312^x \mod 31 nicht alle möglichen Reste aus Z31\mathbb{Z}_{31}^* besuchen:

xx 2xmod312^x \mod 31 3xmod313^x \mod 31
1 2 3
2 4 9
3 8 27
4 16 19
5 1 26
6 2 16
7 4 17
8 8 20
9 16 29
10 1 25
11 2 13
12 4 8
13 8 24
14 16 10
15 1 30
Note 1

Die Zahl 22 ist keine Primitivwurzel modulo 3131 - es gibt nur 5 verschiedene Resultate: 11, 22, 44, 88, 1616. Dadurch ist es für Eve einfacher, auf den Schlüssel zu schliessen. Wähle also gg so, dass gxmodpg^x \mod p alle Zahlen von 11 bis p1p-1 abdeckt. Dann ist gg eine Primitivwurzel modulo pp, und der diskrete Logarithmus wird schwerer zu berechnen.

Einwegfunktionen

Eine Einwegfunktion ist eine Funktion, die in einer Richtung einfach zu berechnen aber sehr schwer umkehrbar ist.

Definition 1: One-Way-Function

Eine One-Way-Function ist eine injektive Funktion

f:XYf:X\to Y

so dass gilt:

  • Es gibt ein effizientes Verfahren zur Bestimmung von y=f(x)xXy=f(x)\quad\forall x\in X.
  • Die Umkehrung ist praktisch unmöglich, d.h. es gibt kein effizientes Verfahren zur Bestimmung von x=f1(y)yf(X)x=f^{-1}(y)\quad\forall y\in f(X).
Note 2

Das heisst nicht, dass eine Einwegfunktion nicht umkehrbar ist, die Umkehrung ist nur so schwierig, dass sie sehr schwer umzusetzen ist. Man braucht also etwas anderes: eine Einwegfunktion mit Falltür; das heisst die Umkehrbarkeit ist effizient möglich, falls man "ein Geheimnis" kennt.

Definition 2: Trap-Door One-Way-Function

Eine Trap-Door One-Way-Function ist eine injektive Funktion f:XYf:X\to Y, für die gilt:

  • Es gibt effiziente Verfahren zur Berechnung von y=f(x)xXy=f(x)\quad\forall x\in X und x=f1(y)yf(X)x=f^{-1}(y)\quad\forall y\in f(X).
  • Das Verfahren zur Berechnung von f1f^{-1} kann nicht aus dem Verfahren zur Berechnung von ff hergeleitet werden - man benötigt eine (geheime) Zusatzinformation.

Dass Funktionen in der modularen Arithmetik zu Einwegfunktionen werden können, wird klar, wenn wir uns folgendes Beispiel anschauen:

Example 3

Nehmen wir die Funktion f(x)=3xf(x) = 3^x: Wenn x=4x = 4 ist, ist f(4)=81f(4)=81. Auch die Umkehrung ist nicht so schwierig: Ist f(x)=81f(x) = 81, nehmen wir einfach den log3(81)\log_3(81) und erhalten 44 als Resultat für xx.

Schauen wir uns nun die Funktion in mod17\mod 17 an; da wird die Sache kniffliger:

f(x)=3xmod17f(x) = 3^x \mod 17

Für x=4x = 4 ist das Resultat 1313. Haben wir nur die Basis 33 und das Resultat 13mod1713 \mod 17, wird es schon schwieriger, xx zu finden - wir müssen raten.

Definition 3: Diskrete Exponentialfunktion

Eine Funktion der Form bxmodmb^x \mod m heisst diskrete Exponentialfunktion. Die Umkehrung davon heisst diskreter Logarithmus. Erstere lässt sich selbst für grosse Zahlen effizient ausrechnen.

Example 4

Wir wollen 17553mod3117^{553} \mod 31 ausrechnen: Für eine effiziente Berechnung suchen wir eine Zahl der Form 17x17^x, die modulo 3131 einen kleinen Wert ergibt. Wir finden:

1730mod311.17^{30} \mod 31 \equiv 1.

Jetzt wird damit gerechnet:

17553mod31173018+13mod31(1730mod31)181713mod31.17^{553} \mod 31 \equiv 17^{30 \cdot 18 + 13} \mod 31 \equiv (17^{30} \mod 31)^{18} \cdot 17^{13} \mod 31.

Da 1730mod31117^{30} \mod 31 \equiv 1, ergibt sich:

1181713mod311713mod313mod313.1^{18} \cdot 17^{13} \mod 31 \equiv 17^{13} \mod 31 \equiv 3 \mod 31 \equiv 3.
Exercise 2: Mod mit grossen Exponenten

Berechne:

a) 255mod92^{55} \mod 9

b) 71223mod187^{1223} \mod 18

c) 31023mod103^{1023} \mod 10

Solution

a)

255mod92318+1mod9(23)1821mod9(1)182mod92mod9\begin{align*} 2^{55} \mod 9 &\equiv 2^{3 \cdot 18 + 1} \mod 9 \equiv (2^3)^{18} \cdot 2^1 \mod 9\\ &\equiv (-1)^{18} \cdot 2 \mod 9\equiv 2 \mod 9 \end{align*}

b)

71223mod1873407+2mod18(73)40772mod18140749mod1813mod18\begin{align*} 7^{1223} \mod 18 &\equiv 7^{3 \cdot 407 + 2} \mod 18 \equiv (7^3)^{407} \cdot 7^2\mod 18\\ &\equiv 1^{407} \cdot 49\mod 18 \equiv 13 \mod 18 \end{align*}

c)

31023mod1032511+1mod10(32)51131mod10(1)5113mod103mod107mod10\begin{align*} 3^{1023} \mod 10 &\equiv 3^{2 \cdot 511 + 1} \mod 10 \equiv (3^2)^{511} \cdot 3^1 \mod 10\\ &\equiv (-1)^{511} \cdot 3 \mod 10 \equiv -3 \mod 10 \equiv 7 \mod 10 \end{align*}

Der Weg, um den diskreten Logarithmus auszurechnen, ist im Allgemeinen sehr viel langwieriger, da wir nur ausprobieren können. Bei einem sehr hohen Modulus kann das äusserst lange dauern.

Eine andere One-Way-Function ist die Multiplikation grosser Primzahlen. Wir wissen, dass das Produkt zweier Primzahlen einfach zu berechnen ist - wie sieht es mit der Umkehrung aus?

Exercise 3: Primfaktorzerlegung

Bestimme die Primfaktorzerlegung von

a) 21

b) 65

c) 14'803

d) 12'863'273

Solution

373\cdot7, 5135\cdot13, 113131113\cdot131 und 325939473259\cdot3947

Je grösser die Zahl, desto aufwändiger kann es werden, ihre Primfaktorzerlegung zu bestimmen.

Exercise 4: Primfaktorzerlegung II

Bestimme die Primfaktorzerlegung von 2,469,1352,\,469,\,135 und 782782.

Solution

22, 7677\cdot 67, 5335\cdot 3^3 und 217232\cdot17\cdot23

Obige Übung ist einfach, weil einer der beiden Primfaktoren sehr klein ist. Im Allgemeinen gilt aber, dass das Multiplizieren zweier grosser Primzahlen eine One-Way-Trap-Door-Function ist.

Auf der Multiplikation zweier grosser Primzahlen beruht das bekannteste asymmetrische Verschlüsselungsverfahren RSA. Wählt nämlich Bob zwei grosse Primzahlen pp und qq und hält diese geheim, so kann er das Produkt N=pqN = p\cdot q veröffentlichen, ohne in Gefahr zu laufen, dass jemand die Primfaktoren pp und qq bestimmen kann.

RSA: Das Verfahren

RSA ist ein asymmetrisches Verfahren; es gibt einen Public Key und einen Private Key. Beide Keys werden mit Hilfe von Primzahlen gebildet und in das Verfahren spielt die Modulo-Rechnung hinein. Den Namen hat das Verfahren von Ronald Rivest, Adi Shamir und Leonard Adleman; sie haben es 1977 kreiert.

Für die Erzeugung der beiden Schlüssel wählt man zunächst zwei grosse Primzahlen pp und qq. Diese werden multipliziert und man erhält n=pqn = p\cdot q. Diese Zahl nn sowie eine weitere, (fast) beliebig wählbare Zahl ee (encipher: verschlüsseln) bilden den Public Key (en)(e\mid n). Eine dritte Zahl dd (decipher: entschlüsseln), zu deren Berechnung wir später kommen, ist Grundlage des Private Keys. Verschlüsselt wird durch

Cmemodn;C\equiv m^e\mod n;

mm ist der Klartext (Message), CC der verschlüsselte Text (Cipher).

Exercise 5: Modulo is it

Nehmen wir an, du willst an Alice die Nachricht mm schicken. Alices Public Key sei (7187)(7\mid 187), also n=187n=187 und e=7e=7. Das mm sei 7676; die Nachricht lautet also ... .

Solution

767mod18732=100000(2)76^7\mod187\equiv32=100000_{(2)}

Zum Entschlüsseln benötigt man den geheimen Schlüssel dd. Entschlüsselt wird damit analog durch

mCdmodn.m\equiv C^d\mod n.
Exercise 6: Wieder Modulo

Und umgekehrt? Angenommen, dein öffentlicher Schlüssel ist (7187)(7\mid 187). Du erhältst die damit verschlüsselte Nachricht C=142C=142. Um diese zu entschlüsseln, benötigst du deinen Private Key - der ist in diesem Fall d=23d=23.

Solution

14223mod18765142^{23}\mod187\equiv65

Note 3

Das funktioniert allerdings nur, wenn die Nachricht mm (als Zahl) kleiner ist als nn. Dies ist allerdings keine Einschränkung. Will man eine Nachricht verschlüsseln, deren Zahlenwert "zu gross" ist, so teilt man sie in kleinere Blöcke und verschlüsselt jeden Block einzeln.

Example 5

Um es einfach zu halten, codieren wir: Leerzeichen = 00, A = 01, B = 02, \dots, Z = 26. Mit dem Schlüssel (en)=(172773)(e\mid n) = (17\mid 2773) wird die Nachricht:

051818011805000821130114211300051920\begin{align*} & 05\quad 18\quad 18\quad 01\quad 18\quad 05\quad 00\quad 08\quad 21\\ & 13\quad 01\quad 14\quad 21\quad 13\quad 00\quad 05\quad 19\quad 20 \end{align*}

in 3er-Blöcke geteilt (die sind sicher kleiner als nn):

051818011805000821130114211300051920\begin{align*} & 051\quad 818\quad 011\quad 805\quad 000\quad 821\\ & 130\quad 114\quad 211\quad 300\quad 051\quad 920 \end{align*}

und verschlüsselt zu (mit führenden Nullen auf vier Stellen aufgefüllt):

223620001725054200000436198816841064056722360948\begin{align*} & 2236\quad 2000\quad 1725\quad 0542\quad 0000\quad 0436\\ & 1988\quad 1684\quad 1064\quad 0567\quad 2236\quad 0948 \end{align*}

Nun zur Frage, wie man den Private Key dd berechnet:

Note 4

Der Private Key dd errechnet sich aus der Gleichung

edmod(p1)(q1)=1e\cdot d\mod(p-1)(q-1) = 1

Grundlage zur Berechnung von dd ist folgender Satz, der garantiert, dass es eine solche Zahl überhaupt gibt - vorausgesetzt die Zahl ee hat eine bestimmte Eigenschaft ...

Theorem 1

Sind a,bZa,b\in\mathbb{Z} teilerfremd, so gibt es eine ganze Zahl cc, so dass

bcmoda1b\cdot c\mod a\equiv1
Proof

Da aa und bb teilerfremd sind, gilt gcd(a,b)=1\gcd(a,b) = 1. Nach dem Satz von Bézout gibt es ganze Zahlen x,yZx,y \in \mathbb{Z} mit

ax+by=1.a \cdot x + b \cdot y = 1.

Betrachten wir diese Gleichung modulo aa, so erhalten wir

ax+by1(moda).a \cdot x + b \cdot y \equiv 1 \pmod{a}.

Da ax0(moda)a \cdot x \equiv 0 \pmod{a}, folgt

by1(moda).b \cdot y \equiv 1 \pmod{a}.

Setze c:=yc := y. Dann gilt

bc1(moda),b \cdot c \equiv 1 \pmod{a},

womit die Existenz von cc gezeigt ist.

Definition 4: Modulo Inverses

Mit den Bezeichnungen aus obigem Satz sagt man, bb ist Modulo aa invertierbar und nennt cc das modular Inverse von bb.

Exercise 7: Finde mod Inverse

Finde das modular Inverse Element cc zu 33 modulo 55.

Solution

Mit Ausprobieren findet man 312mod53^{-1}\equiv2\mod5.

In unserem Fall sind wir daran interessiert ee modulo (p1)(q1)(p-1)(q-1) zu invertieren. Das heisst insbesondere, dass ee und (p1)(q1)(p-1)(q-1) teilerfremd sein müssen.

Und wie berechnet man das modular Inverse nun? Ein Verfahren für diese Berechnung ist in dem Beweis zu obigem Satz versteckt. Deswegen folgt er hier ausführlich. Er erfolgt in drei Schritten:

  1. Mit dem euklidschen Algorithmus zur Bestimmung des ggT
  2. Summendarstellung des ggT von entsprechenden Vielfachen der beiden Zahlen (erweiterter Euklidscher Algorithmus)
  3. Betrachtung des Falls, dass aa und bb teilerfremd sind, d.h. dass ihr ggT 11 ist.

Wir wissen bereits, wie man den ggT von zwei Zahlen mit dem Euklidschen Algorithmus bestimmt - der ggT ist ja dann der letzte, nichttriviale Rest.

Exercise 8: Recap Euklid'scher Algorithmus

Schreibe allgemein das Verfahren des Euklidschen Algorithmus für zwei Zahlen aa und bb auf.

Solution

OEdA aba\geq b und für unsere Zwecke gcd(a,b)=1\gcd(a,b)=1.

a=q1b+r1b=q2r1+r2r1=q3r2+r3=rk2=qkrk1+rkrk1=qk+1rk+0\begin{align*} a &= q_1b+r_1\\ b &= q_2r_1+r_2\\ r_1 &= q_3r_2+r_3\\ \vdots &= \vdots\\ r_{k-2} &= q_{k}r_{k-1}+r_{k}\\ r_{k-1} &= q_{k+1}r_{k}+0 \end{align*}

Rechnet man nun rückwärts und ersetzt die Reste durch entsprechende Ausdrücke, so erhält man eine Vielfachendarstellung von aa und bb für ihren ggT 11.

Exercise 9: Recap Beweis Euklid'scher Algorithmus

Zeige dies.

Solution

Aus der letzten Zeile folgt 0=rk1qk+1rkrk1=qk+1rk0=r_{k-1} - q_{k+1}r_k\Leftrightarrow r_{k-1}=q_{k+1}r_k und weiter

rk2=qkrk1+rk=qkqk+1rk+rk=(qkqk+1+1)rk=lk2rkrk\begin{align*} r_{k-2} &= q_{k}r_{k-1}+r_{k}\\ &= q_{k}q_{k+1}r_k+r_{k}\\ &= (q_{k}q_{k+1}+1)r_{k}\\ &= l_{k-2}\cdot r_k\tag{$l_{k-2}\in\mathbb{Z}$}\\ &\sim r_k \end{align*}

Rückwärts eingesetzt folgt b=lbrkb=l_br_k und a=larka=l_ar_k, also rkar_k|a und rkbr_k|b. Also gibt es x,yZx,y\in\mathbb{Z} so, dass rk=xa+ybr_k=xa+yb

Exercise 10: Berechne gcd

Berechne mit Hilfe des euklidischen Algorithmus:

a) gcd(234, 566)\gcd(234,\ 566)

b) gcd(357, 131)\gcd(357,\ 131)

c) gcd(728, 1339)\gcd(728,\ 1339)

Solution

a) gcd(234, 566)\gcd(234,\ 566)
Wende den Algorithmus an:

  • 566=2234+98566 = 2 \cdot 234 + 98
  • 234=298+38234 = 2 \cdot 98 + 38
  • 98=238+2298 = 2 \cdot 38 + 22
  • 38=122+1638 = 1 \cdot 22 + 16
  • 22=116+622 = 1 \cdot 16 + 6
  • 16=26+416 = 2 \cdot 6 + 4
  • 6=14+26 = 1 \cdot 4 + 2
  • 4=22+04 = 2 \cdot 2 + 0

gcd(234,566)=2\Rightarrow \gcd(234,566) = \boxed{2}

b) gcd(357, 131)\gcd(357,\ 131)

  • 357=2131+95357 = 2 \cdot 131 + 95
  • 131=195+36131 = 1 \cdot 95 + 36
  • 95=236+2395 = 2 \cdot 36 + 23
  • 36=123+1336 = 1 \cdot 23 + 13
  • 23=113+1023 = 1 \cdot 13 + 10
  • 13=110+313 = 1 \cdot 10 + 3
  • 10=33+110 = 3 \cdot 3 + 1
  • 3=31+03 = 3 \cdot 1 + 0

gcd(357,131)=1\Rightarrow \gcd(357,131) = \boxed{1}

c) gcd(728, 1339)\gcd(728,\ 1339)

  • 1339=1728+6111339 = 1 \cdot 728 + 611
  • 728=1611+117728 = 1 \cdot 611 + 117
  • 611=5117+26611 = 5 \cdot 117 + 26
  • 117=426+13117 = 4 \cdot 26 + 13
  • 26=213+026 = 2 \cdot 13 + 0

gcd(728,1339)=13\Rightarrow \gcd(728,1339) = \boxed{13}

Theorem 2: Lemma von Bézout

Zu zwei Zahlen a,bZa,b\in\mathbb{Z} gibt es immer Zahlen x,yZx,y\in\mathbb{Z}, so dass

gcd(a,b)=xa+yb.\gcd(a,b)=x\cdot a+y\cdot b.
Proof

Idee: Wir betrachten alle ganzzahligen Linearkombinationen von aa und bb:

S={xa+ybx,yZ, xa+yb>0}.S = \{\, x \cdot a + y \cdot b \mid x, y \in \mathbb{Z},\ x \cdot a + y \cdot b > 0 \,\}.

Diese Menge SS ist eine Teilmenge der positiven ganzen Zahlen N\mathbb{N} und damit nichtleer (z. B. a|a| oder b|b| liegt in SS für geeignetes x,yx,y). Nach dem Prinzip des wohlgeordneten N\mathbb{N} hat SS ein kleinstes Element – nennen wir es dd. Dann ist d=x0a+y0bd = x_0 \cdot a + y_0 \cdot b für gewisse x0,y0Zx_0, y_0 \in \mathbb{Z}.

Nun zeigen wir, dass dd der grösste gemeinsame Teiler von aa und bb ist:

  1. dd teilt sowohl aa als auch bb:
    Division mit Rest: Teile aa durch dd:

    a=qd+r,mit 0r<d.a = q \cdot d + r,\quad \text{mit } 0 \le r < d.

    Dann ist

    r=aqd=aq(x0a+y0b)=a(1qx0)+b(qy0).r = a - q \cdot d = a - q(x_0 a + y_0 b) = a(1 - qx_0) + b(-q y_0).

    Also ist rr eine weitere Linearkombination von aa und bb, also rSr \in S. Aber r<dr < d – Widerspruch zur Minimalität von dd, ausser für r=0r = 0. Also gilt: dad \mid a.

    Analog zeigt man: dbd \mid b.

  2. Wenn cc ein Teiler von aa und bb ist, dann gilt cdc \mid d:

    Denn jede Linearkombination xa+ybx \cdot a + y \cdot b ist durch cc teilbar, also insbesondere dd.

\Rightarrow dd ist der grösste gemeinsame Teiler von aa und bb.

Da d=x0a+y0bd = x_0 \cdot a + y_0 \cdot b, folgt die Behauptung.

Damit ist Schritt drei nur noch Formsache. Für teilerfremde a,ba,b gilt jetzt

1=xa+yb1=x\cdot a+ y\cdot b

Dies gilt natürlich auch noch modulo aa bzw. bb, da xamoda=0x\cdot a\mod a=0 ist.

xa+ybmoda=ybmoda=1.x\cdot a+y\cdot b\mod a=y\cdot b\mod a=1.

Also ist c=yc=y modulo aa invers zu bb.

Hat man also die Vielfachensummendarstellung

1=gcd((p1)(q1),e)=x(p1)(q1)+ye1=\gcd((p-1)(q-1),e)=x\cdot(p-1)(q-1)+y\cdot e

bestimmt, so ist die kleinste positive Zahl der Form

y+k(p1)(q1)y+k\cdot(p-1)(q-1)

gleich dem Private Key dd.

Note 5

Dieses yy lässt sich also mit dem Euklid'schen Algorithmus berechnen. Erweiterter Euklid kommentiert.

Der erweiterte Euklid'sche Algorithmus

Berechnung des inversen Elements dd zu emodφ(n)e \mod \varphi(n)

Um das inverse Element dd zu emodφ(n)e \mod \varphi(n) zu berechnen, wird der erweiterte euklidische Algorithmus verwendet. Dabei soll gelten:

de1modφ(n).d \cdot e \equiv 1 \mod \varphi(n).
Example 6

Gegeben:

  • p=31p = 31
  • q=71q = 71
  • n=pq=2201n = p \cdot q = 2201
  • e=37e = 37

Berechne:

φ(n)=(p1)(q1)=3070=2100\varphi(n) = (p - 1)(q - 1) = 30 \cdot 70 = 2100

Gesucht ist dd mit:

d371mod2100d \cdot 37 \equiv 1 \mod 2100

Berechne gcd(2100,37)\gcd(2100, 37):

  1. 2100=5637+282100 = 56 \cdot 37 + 28
    28=2100563728 = 2100 - 56 \cdot 37

  2. 37=128+937 = 1 \cdot 28 + 9
    9=371289 = 37 - 1 \cdot 28

  3. 28=39+128 = 3 \cdot 9 + 1
    1=28391 = 28 - 3 \cdot 9

Rücksubstitution: Substituiere von unten nach oben:

  • 1=28391 = 28 - 3 \cdot 9
  • =283(37128)= 28 - 3 \cdot (37 - 1 \cdot 28)
  • =28337+328= 28 - 3 \cdot 37 + 3 \cdot 28
  • =428337= 4 \cdot 28 - 3 \cdot 37

Jetzt 2828 durch Ausdruck aus 1. Gleichung ersetzen:

  • =4(21005637)337= 4 \cdot (2100 - 56 \cdot 37) - 3 \cdot 37
  • =4210022437337= 4 \cdot 2100 - 224 \cdot 37 - 3 \cdot 37
  • =4210022737= 4 \cdot 2100 - 227 \cdot 37

Damit:

1=42100227371 = 4 \cdot 2100 - 227 \cdot 37

Schlussfolgerung: Das ist eine Darstellung von 11 als Linearkombination:

1=xφ(n)+de1 = x \cdot \varphi(n) + d \cdot e

In unserem Fall:

d=227modulo 2100d227mod2100=1873d = -227 \Rightarrow \text{modulo } 2100 \Rightarrow d \equiv -227 \mod 2100 = \boxed{1873}

Ergebnis: Das modulare Inverse von e=37e = 37 modulo φ(n)=2100\varphi(n) = 2100 ist:

d=1873\boxed{d = 1873}

Kontrolle:

187337=69301mod2100=11873 \cdot 37 = 69301 \mod 2100 = 1 \quad \checkmark
Exercise 11: Inverse Elemente

Gegeben: e=59e = 59, n=222n = 222. Finde das inverse Element dd zu ee modulo φ(n)\varphi(n).

Solution

Gegeben: e=59e = 59, n=222n = 222

Zuerst die Primfaktorzerlegung n=2337n = 2 \cdot 3 \cdot 37.

Da φ\varphi multiplikativ ist, gilt:

φ(n)=φ(2337)=φ(2)φ(3)φ(37)=(21)(31)(371)=1236=72\begin{align*} \varphi(n) &= \varphi(2 \cdot 3 \cdot 37) = \varphi(2) \cdot \varphi(3) \cdot \varphi(37)\\ &= (2 - 1) \cdot (3 - 1) \cdot (37 - 1) = 1 \cdot 2 \cdot 36 = 72 \end{align*}

Gesucht: dd mit d591mod72d \cdot 59 \equiv 1 \mod 72

  • 72=159+1313=7215972 = 1 \cdot 59 + 13 \Rightarrow 13 = 72 - 1 \cdot 59
  • 59=413+77=5941359 = 4 \cdot 13 + 7 \Rightarrow 7 = 59 - 4 \cdot 13
  • 13=17+66=131713 = 1 \cdot 7 + 6 \Rightarrow 6 = 13 - 1 \cdot 7
  • 7=16+11=7167 = 1 \cdot 6 + 1 \Rightarrow 1 = 7 - 1 \cdot 6

und nun mit dem erweiterten Euklid:

  1. 1=7161 = 7 - 1 \cdot 6
  2. =71(1317)=113+27= 7 - 1 \cdot (13 - 1 \cdot 7) = -1 \cdot 13 + 2 \cdot 7
  3. =113+2(59413)=113+259813= -1 \cdot 13 + 2 \cdot (59 - 4 \cdot 13) = -1 \cdot 13 + 2 \cdot 59 - 8 \cdot 13
  4. =259913= 2 \cdot 59 - 9 \cdot 13
  5. =2599(72159)=259972+959= 2 \cdot 59 - 9 \cdot (72 - 1 \cdot 59) = 2 \cdot 59 - 9 \cdot 72 + 9 \cdot 59
  6. =1159972= 11 \cdot 59 - 9 \cdot 72

Ergebnis: 1=11599721 = 11 \cdot 59 - 9 \cdot 72.

Damit ist d=11d = \boxed{11}.

Kontrolle: 1159=649,649mod72=111 \cdot 59 = 649,\quad 649 \mod 72 = 1 \quad \checkmark

Das modulare Inverse von 59mod7259 \mod 72 ist also: d=11\boxed{d = 11}

Note 6

Mit Hilfe des euklidischen Algorithmus kann man also den Private Key dd bestimmen. Kennt man die beiden Primzahlen pp und qq, so ist es also einfach, dd zu berechnen und damit dann die mit nn und ee verschlüsselten Nachrichten zu entschlüsseln. Allerdings ist es nahezu unmöglich, dd zu berechnen, ohne pp und qq zu kennen.

Beweis des RSA-Verfahrens

Aber warum funktioniert das Verfahren denn nun überhaupt? Warum kommt wirklich wieder der Klartext heraus, mit anderen Worten: warum gilt

Cdmodn=m?C^d\mod n=m?

Wir erinnern uns, wie der Cipher-Text entstanden ist,

Cdmodn=(me)dmodn=medmodn,C^d\mod n = (m^e)^d\mod n= m^{e\cdot d}\mod n,

und können daher die Frage umformulieren: gilt tatsächlich

medmodn=m?m^{e\cdot d}\mod n=m?

Die Antwort auf diese Frage lautet natürlich ja. Für den Beweis brauchen wir den kleinen Satz von Fermat, der ein Spezialfall des Satzes von Euler ist. Zur einfachen Formulierung des Satzes brauchen wir die sogenannte Euler'sche φ\varphi-Funktion.

Definition 5: Euler'sche phi-Funktion

Für eine natürliche Zahl nn ist φ(n)\varphi(n) die Anzahl der natürlichen Zahlen n\leq n, deren grösster gemeinsamer Teiler mit nn gleich 11 ist. Man nennt φ\varphi die Euler'sche φ\varphi-Funktion.

Theorem 3

Ist pp prim, dann gilt

φ(p)=p1.\varphi(p) = p-1.
Proof

Da pp teilerfremd zu 1,2,3,,p11,2,3,\dots,p-1 ist, folgt der Satz.

Theorem 4

Sind p,qp,q zwei verschiedene Primzahlen, so ist

φ(pq)=(p1)(q1).\varphi(p\cdot q)=(p-1)(q-1).
Proof

Reminder: Die Eulersche φ\varphi-Funktion zählt die positiven ganzen Zahlen kleiner oder gleich nn, die zu nn teilerfremd sind.

Seien pp und qq zwei verschiedene Primzahlen. Dann ist pqpq zusammengesetzt, aber seine einzigen Primfaktoren sind pp und qq. Eine Zahl 1kpq1 \le k \le pq ist genau dann nicht teilerfremd zu pqpq, wenn sie durch pp oder durch qq teilbar ist.

Die Anzahl der Zahlen zwischen 11 und pqpq, die durch pp teilbar sind, ist:

pqp=q.\left\lfloor \frac{pq}{p} \right\rfloor = q.

Analog gibt es pp Zahlen, die durch qq teilbar sind.

Aber Achtung: Eine Zahl, die sowohl durch pp als auch durch qq teilbar ist, ist durch pqpq teilbar – und das ist nur die Zahl pqpq selbst. Diese wurde also doppelt gezählt, also müssen wir 1 abziehen:

Die Anzahl der Zahlen 1kpq1 \le k \le pq, die nicht teilerfremd zu pqpq sind, ist:

q+p1.q + p - 1.

Somit ist die Anzahl der teilerfremden Zahlen gleich:

pq(q+p1)=pqpq+1=(p1)(q1)pq - (q + p - 1) = pq - p - q + 1 = (p - 1)(q - 1)

und daraus folgt die Behauptung

φ(pq)=(p1)(q1).\varphi(pq) = (p - 1)(q - 1).

Nun folgt der kleine Satz von Fermat. Zuerst schicken wir aber einen Hilfssatz voraus.

Theorem 5

Beim Teilen der ersten (p1)(p - 1) Vielfachen von aNa \in \mathbb{N}, also der Zahlen

a,2a,3a,,(p1)a,a,\, 2a,\, 3a,\, \dotsc,\,(p - 1)a,

durch eine Primzahl pPp \in \mathbb{P} mit gcd(a,p)=1\gcd(a, p) = 1 tritt jeder Rest ri{1,2,,p1}r_i \in \{1, 2, \dotsc, p-1\} genau einmal auf. Formal:

iarimodp,mit ri{1,,p1}.i \cdot a \equiv r_i \mod p, \quad \text{mit } r_i \in \{1, \dotsc, p - 1\}.
Proof

Angenommen, es gäbe zwei gleiche Reste ri=rjr_i = r_j mit iji \neq j, i,j{1,,p1}i, j \in \{1, \dotsc, p - 1\}. Dann gälte:

iarirjjamodp.i \cdot a \equiv r_i \equiv r_j \equiv j \cdot a \mod p.

Daraus folgt:

iajamodp(ij)a0modp.i \cdot a \equiv j \cdot a \mod p \quad \Rightarrow \quad (i - j) \cdot a \equiv 0 \mod p.

Da gcd(a,p)=1\gcd(a, p) = 1, kann man durch aa kürzen:

ij0modpijmodp.i - j \equiv 0 \mod p \quad \Rightarrow \quad i \equiv j \mod p.

Da aber 1i,j<p1 \leq i, j < p, folgt daraus i=ji = j, im Widerspruch zur Annahme iji \neq j: das heisst jeder Rest rir_i tritt genau einmal auf.

Theorem 6: Kleiner Fermatscher Satz

Sei mm eine natürliche Zahl und teilerfremd zur Primzahl pp. Dann gilt

mp1modp=1.m^{p-1}\mod p=1.
Proof

Multipliziert man alle möglichen Reste modulo pp:

a2a3a(p1)ar1r2rp1modp.a \cdot 2a \cdot 3a \cdots (p - 1)a \equiv r_1 \cdot r_2 \cdot \dotsc \cdot r_{p-1} \mod p.

Da laut Hilfssatz jeder Rest rir_i genau einmal vorkommt, ist:

ap1(p1)!(p1)!modp.a^{p - 1} \cdot (p - 1)! \equiv (p - 1)! \mod p.

Da gcd((p1)!,p)=1\gcd((p - 1)!, p) = 1, darf man kürzen:

ap11modp.a^{p - 1} \equiv 1 \mod p.

Der Beweis, dass die Entschlüsselung korrekt ist, geht damit so: Wir wissen, dass

edmod(p1)(q1)=1.e\cdot d\mod(p-1)(q-1)=1.

Das heisst, es gibt ein kZk\in\mathbb{Z} mit

ed=k(p1)(q1)+1.e\cdot d=k\cdot(p-1)(q-1)+1.

Wir betrachten eine Message mm, die ver- und entschlüsselt wird und ziehen vom Resultat mm ab:

medmmodp=mk(p1)(q1)+1mmodp=(m(p1))k(q1)mmmodp=1k(q1)mmmodp=0.\begin{align*} m^{e\cdot d}-m\mod p &= m^{k\cdot(p-1)(q-1)+1}-m\mod p\\ &= (m^{(p-1)})^{k(q-1)}\cdot m-m\mod p\\ &= 1^{k(q-1)}\cdot m-m\mod p=0. \end{align*}

Dies gilt insbesondere auch, wenn pp ein Teiler von mm ist, denn dann ist medmmodpm^{e\cdot d}-m\mod p sowieso gleich 00. Ferner sieht man analog, dass medmmodq=0m^{e\cdot d}-m\mod q = 0. Die Primzahlen pp und qq teilen also dieselbe Zahl medmm^{e\cdot d}-m, also muss auch ihr Produkt diese Zahl teilen. Somit gilt:

medmodpq=m.m^{ed}\mod pq=m.

Der Beweis kommentiert.

Anleitung RSA

Schritte:

a) Wähle zwei Primzahlen pp und qq

b) Berechne n=pqn = p \cdot q

c) Berechne die eulersche Phi-Funktion:

φ(n)=(p1)(q1)\varphi(n) = (p - 1) \cdot (q - 1)

d) Wähle eine natürliche Zahl ee mit gcd(e,φ(n))=1\gcd(e, \varphi(n)) = 1

e) Berechne dd, das inverse Element zu emodφ(n)e \mod \varphi(n) mit dem erweiterten euklidischen Algorithmus.
Es gilt:

de1modφ(n)d \cdot e \equiv 1 \mod \varphi(n)

f) Öffentlicher Schlüssel: (n, e)(n,\ e)

g) Privater Schlüssel: (n, d)(n,\ d)

Der öffentliche Schlüssel wird veröffentlicht, sodass jeder, der eine verschlüsselte Nachricht senden möchte, darauf zugreifen kann. Der Klartext wird mit Hilfe der ASCII-Tabelle in eine binäre Zahl mm umgewandelt.

Verschlüsselung:

Gegeben: Nachricht mm

cmemodnc \equiv m^e \mod n

Entschlüsselung:

Gegeben: Chiffrat cc

mcdmodnm \equiv c^d \mod n
Note 7

In der Praxis wird für ee oft 216+1=655372^{16} + 1 = 65537 gewählt. Ferner: Die Nachricht mm muss kleiner sein als nn, daher muss sie gegebenenfalls in kleinere Blöcke aufgeteilt werden.

Example 7

Wir erhalten von Alice eine verschlüsselte Nachricht cc. Gesucht sind:

  • der private Schlüssel (d,n)(d, n)
  • der Klartext mm

Gegeben:

  • p=43p = 43
  • q=47q = 47
  • e=19e = 19
  • c=74c = 74

Berechnungen:

  • n=4347=2021n = 43 \cdot 47 = 2021
  • φ(n)=(431)(471)=4246=1932\varphi(n) = (43 - 1)(47 - 1) = 42 \cdot 46 = 1932

Berechne dd mit erweitertem euklidischen Algorithmus

  • 1932=10119+1313=1932101191932 = 101 \cdot 19 + 13 \Rightarrow 13 = 1932 - 101 \cdot 19
  • 19=113+66=1911319 = 1 \cdot 13 + 6 \Rightarrow 6 = 19 - 1 \cdot 13
  • 13=26+11=132613 = 2 \cdot 6 + 1 \Rightarrow 1 = 13 - 2 \cdot 6

Rückwärts eingesetzt:

  1. 1=13261 = 13 - 2 \cdot 6
  2. =132(19113)=313219= 13 - 2 \cdot (19 - 1 \cdot 13) = 3 \cdot 13 - 2 \cdot 19
  3. =3(193210119)219=3193230519= 3 \cdot (1932 - 101 \cdot 19) - 2 \cdot 19 = 3 \cdot 1932 - 305 \cdot 19 also
1=31932305191 = 3 \cdot 1932 - 305 \cdot 19

Modulo φ(n)=1932\varphi(n) = 1932:

d191mod1932d=305mod1932=1627.d \cdot 19 \equiv 1 \mod 1932 \Rightarrow d = -305 \mod 1932 = \boxed{1627}.

Entschlüsselung der Nachricht

m=cdmodn=741627mod2021m = c^d \mod n = 74^{1627} \mod 2021

Dies ergibt:

m=1371\boxed{m = 1371}
Exercise 12: mit RSA verschlüsseln

p=11p = 11, q=5q = 5 und e=7e = 7. Finde dd und nn und verschlüssle die Zahl 1515 mit RSA.

Solution

p=11p = 11, q=5q = 5, e=7e = 7, n=55n = 55

φ(n)=(p1)(q1)=40\varphi(n) = (p−1)\cdot(q−1) = 40

40=57+55=40577=15+22=7155=22+11=522\begin{align*} 40 &= 5\cdot7 + 5 ⇒ 5 = 40 − 5\cdot7 7 &= 1\cdot5 + 2 ⇒ 2 = 7 − 1\cdot5 5 &= 2\cdot2 + 1 ⇒ 1 = 5 − 2\cdot2 \end{align*}

Rückwärts eingesetzt:

1=5221=52(715)=527+25=35271=(2)7+3(4057)=(2)7+340157=(17)7+340\begin{align*} 1 &= 5 − 2\cdot2 1 &= 5 − 2\cdot(7 − 1\cdot5) = 5 − 2\cdot7 + 2\cdot5 = 3\cdot5 − 2\cdot7 1 &= (−2)\cdot7 + 3\cdot(40 − 5\cdot7) = (−2)\cdot7 + 3\cdot40 − 15\cdot7 &= (−17)\cdot7 + 3\cdot40 \end{align*}

d=(17)(mod40)23(mod40)=23d = (−17) (mod 40) ≡ 23 (mod 40) = 23, c=me(modn)157(mod55)=5c = m^e (mod n) ≡ 15^7 (mod 55) = 5.

Exercise 13: RSA entschlüsseln

p=83p = 83, q=113q = 113, e=29e = 29. Entschlüssle die Zahl 40294029.

Solution

p=83p = 83, q=113q = 113, e=29e = 29, n=83113=9379n = 83 \cdot 113 = 9379

φ(n)=(p1)(q1)=82112=9184\varphi(n) = (p−1)\cdot(q−1) = 82 \cdot 112 = 9184

9184=31629+2020=91843162929=120+99=2912020=29+22=20299=42+11=942\begin{align*} 9184 &= 316\cdot29 + 20 \Rightarrow 20 = 9184 − 316\cdot29 \\ 29 &= 1\cdot20 + 9 \Rightarrow 9 = 29 − 1\cdot20 \\ 20 &= 2\cdot9 + 2 \Rightarrow 2 = 20 − 2\cdot9 \\ 9 &= 4\cdot2 + 1 \Rightarrow 1 = 9 − 4\cdot2 \end{align*}

Rückwärts eingesetzt:

1=942=94(2029)=9420+89=99420=(4)20+9(29120)=(4)20+929920=(13)20+929=92913(918431629)=929139184+410829=411729139184\begin{align*} 1 &= 9 − 4\cdot2 \\ &= 9 − 4\cdot(20 − 2\cdot9) = 9 − 4\cdot20 + 8\cdot9 = 9\cdot9 − 4\cdot20 \\ &= (−4)\cdot20 + 9\cdot(29 − 1\cdot20) = (−4)\cdot20 + 9\cdot29 − 9\cdot20 = (−13)\cdot20 + 9\cdot29 \\ &= 9\cdot29 − 13\cdot(9184 − 316\cdot29) = 9\cdot29 − 13\cdot9184 + 4108\cdot29 \\ &= 4117\cdot29 − 13\cdot9184 \end{align*}

d=4117d = 4117. Entschlüsselung:

m=cd mod n40294117 mod 9379=472m = c^d\ \mathrm{mod}\ n \equiv 4029^{4117}\ \mathrm{mod}\ 9379 = 472

RSA knacken

Zum Schluss noch ein Beispiel, in dem es dem Codeknacker leicht gemacht wird. Also keine Angst, so schnell wie hier lässt sich RSA nicht knacken\dots

Example 8

Man fängt eine RSA-verschlüsselte Nachricht ab. Sie lautet

10473054210223505497035330523101828168 2305497093070549713322042531164705144

Ausserdem weiss man, für wen die Nachricht bestimmt ist. Der öffentliche Schlüssel des Empfängers ist n=17947n=17947, e=21e=21. Um die Nachricht zu entschlüsseln, muss man wissen, aus welchen beiden Primzahlen pp und qq sich nn zusammensetzt. Eine erste Möglichkeit, pp und qq zu finden ist, bei 2 anzufangen und jede Zahl zu testen, ob sie ein Teiler von nn ist. Dabei kann man sich die Arbeit einfacher machen, wenn man bedenkt, dass

  • nicht pp und qq beide grösser als n\sqrt{n} sein können (Man braucht also "nur" die Zahlen bis n\sqrt{n} zu testen.)
  • die beiden gesuchten Teiler von nn Primzahlen sind (man braucht also z.B. die geraden Zahlen gar nicht testen).

Allerdings dauert diese Suche um so länger je grösser pp und qq sind. Es scheint also geschickter zu sein, die Suche bei möglichst grossen Zahlen anzufangen, d.h. bei n\sqrt{n}. Wenn die Zahlen pp und qq eruiert wurden, kann man den Private Key bestimmen.

Das RSA-Rätsel

Im August 1977 wurde mit der Veröffentlichung des RSA-Algorithmus im „Scientific American“ ein Rätsel gestellt: Gegeben ist:

n=114381625757888867669235779976146612010218296721242362562561842934706935245733897830597123563958705058989075147599290026879543541\begin{align*} n = &114 381 625 757 888 867 669 235 779 976 146\\ &612 010 218 296 721 242 362 562 561 842 934\\ &706 935 245 733 897 830 597 123 563 958 705\\ &058 989 075 147 599 290 026 879 543 541 \end{align*} c=96869613754622061477140922254355882905759991124574319847695120930816298225145708356931476622883989628013391990551829945157815154\begin{align*} c = &96 869 613 754 622 061 477 140 922 254 355\\ &882 905 759 991 124 574 319 847 695 120 930\\ &816 298 225 145 708 356 931 476 622 883 989\\ &628 013 391 990 551 829 945 157 815 154 \end{align*} e=9007e = 9 007

Man entschlüssle die Botschaft cc.

Damals ergab sich eine grobe Abschätzung, dass es etwa 410164\cdot10^{16} (4000000000000000040'000'000'000'000'000) Jahre dauern würde, um nn zu faktorisieren. Nach einem Zusammenschluss von 1600 Rechnern dauerte es aber nur ein halbes Jahr, bis klar war:

p=3490529510847650949147849619903898133417764638493387849390820577\begin{align*} p &= 3 490 529 510 847 650 949 147 849 619 903\\ &898 133 417 764 638 493 387 849 390 820 577 \end{align*} q=32769132993266709549961988190834461413177642967992942539798288533\begin{align*} q &= 32 769 132 993 266 709 549 961 988 190 834\\ &461 413 177 642 967 992 942 539 798 288 533 \end{align*}

Die verschlüsselte Botschaft konnte nun leicht ermittelt werden. Sie lautete:

THE MAGIC WORDS ARE SQEAMISCH OSSIFRAGE

(Die magischen Worte sind zimperliche Lämmergeier)

Obwohl diese Nachricht ohne die Kenntnis des privaten Schlüssels dechiffriert wurde, muss man sich keine Sorgen über die Sicherheit von RSA machen. Diese basiert darauf, dass es sehr lange Zeit dauert, bis man von der Zahl n auf die Primfaktoren p und q kommt. Für wichtige Geschäfte wird heute die Zahl n mit mindestens 600 Dezimalstellen gewählt. Aus p und q kann ein Computer die Zahl n=pqn = p\cdot q in kürzester Zeit ausrechnen. Um n jedoch zu faktorisieren, würden selbst die vereinten Kräfte von 100 Millionen aktueller Computer über tausend Jahre benötigen. Die einzige Chance, RSA unsicher zu machen, wäre die Entwicklung von besseren Algorithmen zur Primfaktorzerlegung. Allerdings sind Mathematiker schon seit dem Bekanntwerden, dass jede natürliche Zahl eine eindeutige Primfaktorzerlegung besitzt, an der Lösungssuche zur effizienten Primfaktorzerlegung.