Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

📚 The CoCalc Library - books, templates and other resources

132935 views
License: OTHER
1
\section{RSA-Verfahren}\label{sec:RSA-Verfahren}
2
Das RSA-Verfahren ist ein asymmetrisches Kryptosystem, das von
3
Ronald Linn \textbf{R}ivest, Adi \textbf{S}hamir und Leonard
4
\textbf{A}dleman entwickelt und im August 1977 veröffentlicht wurde\footnote{[msri], S. 2}.
5
6
Da das RSA-Verfahren asymmetrisch ist, wird sowohl ein öffentlicher
7
Schlüssel als auch ein privater Schlüssel benötigt. Der öffentliche
8
Schlüssel dient der Verschlüsselung und besteht aus dem RSA-Modul $N$
9
und dem Verschlüsselungsexponenten $e$. Der private Schlüssel
10
besteht aus dem Entschlüsselungsexponenten $d$ und dem selben RSA-Modul $N$.
11
12
Die Erzeugung dieser drei Zahlen $N$, $e$ und $d$ für das RSA-Verfahren
13
kann, in An-lehnung an [wiki-RSA], in fünf Schritte unterteilt werden:
14
15
\begin{description}
16
\item[Schritt 1:] Als erstes werden zwei große Primzahlen gewählt.
17
Je größer diese Primzahlen sind, desto sicherer
18
ist die Verschlüsselung.
19
(vgl. \cref{sec:Security})
20
\item[Schritt 2:] In diesem Schritt wird RSA-Modul $N = p \cdot q$
21
berechnet, das ein Teil des öffentlichen
22
Schlüssels ist.
23
\item[Schritt 3:] Schritt 3: Nun wird der Wert der Eulerschen
24
$\varphi$-Funktion bei $N$ berechnet. Da $p$
25
und $q$ Primzahlen sind, gilt $\varphi(N) = (p-1) \cdot (q-1)$ (vgl. \cref{sec:Eulersche-Phi-Funktion})
26
\item[Schritt 4:] Nachdem $\varphi(N)$ ermittelt wurde, kann der
27
zweite Teil des öffentlichen Schlüssel, der
28
Verschlüsselungsexponent $e$, ermittelt werden.
29
Folgende Bedingungen müssen für $e$ gelten:
30
$1 < e < \varphi(N) $ und $ggT(e, \varphi(N)) = 1$
31
\item[Schritt 5:] Es folgt die Berechnung des Entschlüsselungsexponenten
32
$d$ als multiplikativ Inverses von $e$
33
bezüglich des Modules $\varphi(N)$. Es soll
34
also folgende Kongruenz gelten:
35
$e \cdot d \equiv 1 \imod{\varphi(N)}$
36
37
\end{description}
38
39
40
\subsection{Verschlüsselung mit dem öffentlichen Schlüssel}
41
Ein Text wird verschlüsselt, indem er in Zahlen umgewandelt wird. Für
42
diese Umwandlung kann der ASCII-Code verwendet werden. Sobald man
43
Zahlen hat, kann man den unverschlüsselten Klartext $K$ mit folgender
44
Kongruenzgleichung in den verschlüsselten Geheimtext $G$ umwandeln: $G \equiv K^e \imod{N}$.\\
45
Die Zahl $N$ sollte deutlich größer sein als K\footnote{vgl. [Reiss], S. 288}.
46
47
In folgendem Beispiel wird der Klartext "`12"' verschlüsselt. Dazu
48
werden als Erstes alle benötigten Variablen erzeugt oder berechnet:
49
50
\begin{description}
51
\item[Schritt 1:] $p := 347$ und $q := 379$
52
\item[Schritt 2:] $N = p \cdot q = 347 \cdot 379 = 131513$
53
\item[Schritt 3:] $\varphi(N) = \varphi(131513) = (347 - 1) \cdot (379 - 1) = 346 \cdot 378 = 130788$
54
\item[Schritt 4:] $1 < (e := 877) < \varphi(N) $
55
\item[Schritt 5:] $877 \cdot d \equiv 1 \imod{130788}$
56
\end{description}
57
58
Um ein $d$ zu finden, das diese Kongruenz erfüllt, wird der
59
erweiterte euklidische Algorithmus angewendet:
60
61
\begin{tabular}{lll}
62
\textbf{Schritt 1}: euklidischer Algorithmus & & \textbf{Schritt 2}: nach Rest auflösen\\
63
$130788 = 149 \cdot 877 + 115$ \myDownArrowB & $\rightarrow$ & $115 = 130788 - 149 \cdot 877$ \myUpArrowB\\
64
$877= 7 \cdot 115 + 72$ & $\rightarrow$ & $72 = 877 - 7 \cdot 115$\\
65
$115= 1 \cdot 72 + 43$ & $\rightarrow$ & $43 = 115 - 72$\\
66
$72= 1 \cdot 43 + 29$ & $\rightarrow$ & $29 = 72 - 43$\\
67
$43= 1 \cdot 29 + 14$ & $\rightarrow$ & $14 = 43 - 29$\\
68
$29= 2 \cdot 14 + 1$ & $\rightarrow$ & $1 = 29 - 2 \cdot 14$
69
\end{tabular}
70
71
\textbf{Schritt 3}: so lange Reste einsetzen, bis eine Linearkombination der Form
72
$1 = x \cdot 877 + y \cdot 130788$ gefunden ist:
73
74
\begin{align*}
75
1 &= 29- 2 \cdot (43-29) \\
76
1 &= 3 \cdot 29 - 2 \cdot (115 - 72) \\
77
1 &= 3 \cdot (72 - 43) - 2 (130788-149 \cdot 877) + 2 \cdot (877 - 7 \cdot 115) \\
78
1 &= 3 \cdot (877 - 7 \cdot 115) -3 \cdot (115 - 72) - 2 \cdot 130788 + 300 \cdot 877 -14 \cdot 155 \\
79
1 &= 303 \cdot 877 - 2 \cdot 130788 - 38 \cdot 115 + 3 \cdot 72 \\
80
1 &= 303 \cdot 877 - 2 \cdot 130788 - 38 \cdot (130788-149 \cdot 877) + 3 \cdot (877 - 7 \cdot 115) \\
81
1 &= 5968 \cdot 877 - 40 \cdot 130788 - 21 \cdot (130788-149 \cdot 877) = 9097 \cdot 877 - 61 \cdot 130788
82
\end{align*}
83
84
$\rightarrow d = 9097$
85
86
Probe:
87
88
\[\frac{d \cdot e - 1}{\varphi(N)} = \frac{877 \cdot 9097 - 1}{130788} = 61\]
89
90
Nun wird der Geheimtext $G$ mit dem Verschlüsselungsexponenten $e$
91
aus dem Klartext $K$ berechnet:
92
93
\begin{align*}
94
G &\equiv K^e \imod{N}\\
95
G &\equiv 12^877 \equiv 12 \cdot (12^6)^{2 \cdot 73} \equiv 12 \cdot 92698^{2 \cdot 73} \equiv 12 \cdot 122810^{73} \imod{131513} \\
96
G &\equiv 12 \cdot 122810 \cdot 122810^{2 \cdot 2 \cdot 2 \cdot 3 \cdot 3} \equiv 27077 \cdot 122234^{2 \cdot 2 \cdot 3 \cdot 3} \equiv 27077 \cdot 90339^{2 \cdot 3 \cdot 3} \imod{131513} \\
97
G &\equiv 27077 \cdot 95706^{9} \equiv 27077 \cdot 9189^{3} \equiv 27077 \cdot 56590 \imod{131513} \\
98
G &\equiv 29467 \imod{131513}
99
\end{align*}
100
101
\subsection{Entschlüsselung mit dem privaten Schlüssel}\label{sec:Decryption}
102
\subsubsection{Entschlüsselung ohne den Chinesischen Restsatz}
103
Der Geheimtext wird entschlüsselt, indem man ihn mit $d$ potenziert
104
und dann denn kleinsten positiven Repräsentanten der Restklasse $N$
105
berechnet: $K \equiv G^d \imod{N}$
106
107
Im Folgenden wird die Entschlüsselung auf das vorhergehende Beispiel
108
angewendet:
109
110
\begin{align*}
111
G &= 29467 ~~~ N= 131513 ~~~ d = 9097 \\
112
K &\equiv G^d \imod{N}\\
113
K &\equiv 29467^{9097} \imod{131513}\\
114
K &\equiv 29467 \cdot (29467^2)^{2 \cdot 2 \cdot 3 \cdot 379} \equiv 29467 \cdot (55263^2)^{2 \cdot 3 \cdot 379} \equiv 29467 \cdot 4283^{2 \cdot 3 \cdot 379} \imod{131513} \\
115
K &\equiv 29467 \cdot 89937^{2 \cdot 3} \equiv 29467 \cdot 88417^3 \equiv 29467 \cdot 24587 \imod{131513} \\
116
K &\equiv 12 \imod{131513}
117
\end{align*}
118
119
\subsubsection{Entschlüsselung mit dem Chinesischen Restsatz}
120
Falls der Entschlüsselungsexponent $d$ sehr groß ist, kann das
121
Potenzieren lange dauern. Dies kann mit dem Chinesischem Restsatz
122
beschleunigt werden\footnote{[Paixão], S. 1}.
123
Diese Idee wurde [Paixão] entnommen:
124
125
Der Geheimtext $G$ und der Exponent $d$ wird folgendermaßen geteilt:
126
127
\begin{tabular}{llll}
128
$\begin{aligned}
129
G_p &\equiv G \imod{p} \\
130
G_q &\equiv G \imod{q}
131
\end{aligned}$ & und &
132
$\begin{aligned}
133
d_p &\equiv d \imod{p-1} \\
134
d_q &\equiv d \imod{q-1}
135
\end{aligned}$ &, da $e \cdot d \equiv 1 \imod{(p-1) \cdot (q-1))}$
136
\end{tabular}
137
138
Dies funktioniert, da der folgende Hilfssatz gilt:
139
140
\begin{mdframed}[tikzsetting={draw=red,ultra thick}, innertopmargin=0.6cm]
141
$K^ed \equiv G \imod{p \cdot q} \Leftrightarrow K^{ed} \equiv G \imod{p} \land K^{ed} \equiv G \imod{q}$
142
\end{mdframed}
143
144
Nun wird dieser kleinere Teil von G mit den kleineren Exponenten "`entschlüsselt"':
145
146
\begin{align*}
147
K_p &\equiv {G_p} ^ {d_p} \imod{p}\\
148
K_q &\equiv {G_q} ^ {d_q} \imod{q}
149
\end{align*}
150
151
Der Chinesische Restsatz ermöglicht es nun, eine Lösung $K$ für die
152
folgenden Kongruenzen zu finden:
153
154
\begin{align*}
155
K &\equiv K_p \imod{p}\\
156
K &\equiv K_q \imod{q}
157
\end{align*}
158
159
Dazu müssen die multiplikativ inversen Elemente ermittelt werden:
160
\begin{align*}
161
y_p \cdot p \equiv 1 \imod{q}\\
162
y_q \cdot q \equiv 1 \imod{p}
163
\end{align*}
164
165
Nun wird der Klartext zusammengesetzt:
166
\[K \equiv (K_p \cdot y_p \cdot q + K_q \cdot y_q \cdot p) \imod{N}\]
167
168
Diese Methode ist etwa vier mal schneller als die Entschlüsselung mit $d$\footnote{[Paixão], S. 2}.
169
170
\subsection{Entschlüsselung ohne den privaten Schlüssel}
171
Ist der Entschlüsselungsexponent $d$ unbekannt, so kann dieser durch
172
Faktorisierung von $N$ zurückgewonnen werden. Faktorisiert man $N$, so
173
kann $\varphi(N)$ berechnet werden und die Kongruenz $e \cdot d \equiv 1 \imod{\varphi(N)}$ gelöst werden.
174
175
Als praktische Arbeit wurde mir folgende Aufgabe gestellt:
176
177
\begin{mdframed}[tikzsetting={draw=black,very thick}, innertopmargin=0.6cm]
178
\begin{verbatim}
179
N := 65937_24735_90338_11941_75738_06421_27758_89771;
180
e := 47;
181
# geheime Botschaft:
182
y := 65087_24329_19692_65260_21005_67465_76581_27499;
183
\end{verbatim}
184
Wie lautet die Botschaft im Klartext?
185
\end{mdframed}
186
187
Um diese Aufgabe zu lösen, versucht man den privaten Schlüssel mit
188
Hilfe des öffentlichen Schlüssels wiederherzustellen.
189
190
Der private Schlüssel $d$ muss die Kongruenzgleichung
191
$e \cdot d \equiv 1 \imod{\varphi(N)}$ erfüllen, allerdings sind
192
$\varphi(N)$ und $d$ nicht bekannt. Um $\varphi(N)$ zu berechnen,
193
werden die Primfaktoren $p$ und $q$, aus denen $N$ besteht, benötigt.
194
$N$ muss also faktorisiert werden. Sobald ein Faktor von $N$ bekannt
195
ist, kann man $N$ durch diesen Faktor teilen und man erhält den
196
zweiten Faktor. Dann kann man wie in \cref{sec:RSA-Verfahren} vorgehen und $d$
197
berechnen. Mit $d$ kann man wie in \cref{sec:Decryption} beschrieben die
198
Geheimbotschaft entschlüsseln.
199
200
Wird das Aribas-Skript im Anhang ausgeführt, das diese Schritte
201
ausführt, erhält man den Klartext "`\textbf{RSAribas}"'.
202
203
204
\subsection{Sicherheit des RSA-Algorithmus}\label{sec:Security}
205
Der RSA-Algorithmus kann, wie oben beschrieben, "`geknackt"' werden,
206
indem der öffentliche Schlüssel faktorisiert wird. Allerdings ist das
207
bei großen Zahlen nahezu unmöglich, da die Algorithmen sehr lange
208
Laufzeiten haben\footnote{[RSA-2190]}.
209
Wie lange die Faktorisierung dauert hängt einerseits vom Algorithmus,
210
andererseits von der Hardware ab.
211
212
Um ein Gefühl dafür zu bekommen was "`sehr lange"' bedeutet, kann man
213
die "`RSA Factoring Challenge"' als Beispiel betrachten. Eine
214
193-stellige Zahl sollte Faktorisiert werden. Für diese Aufgabe
215
wurde am 18. März 1991 ein Preisgeld von 20.000 US-Dollar
216
ausgeschrieben. Ein Team des Instituts für Experimentelle Mathematik
217
in Essen hat am 2. November 2005 diese Aufgabe gelöst und dafür
218
über fünf Monate benötigt. Der Rechenaufwand betrug etwa 30
219
2.2GHz-Opteron-CPU Jahre\footnote{[RSA-2964]}.
220
221
Das Faktorisieren wird zwar immer schneller, da man über bessere und
222
billigere Computer sowie effizientere Algorithmen verfügt, allerdings
223
steigt mit den Hardwareverbesserungen die Sicherheit des
224
RSA-Algorithmus. Mit einer besseren Hardware können deutlich größere
225
Primzahlen erzeugt werden und damit auch ein deutlich längerer
226
öffentlicher Schlüssel generiert werden, der zur Verschlüsselung der
227
Nachricht dient.
228
229
Ein verbesserter Faktorisierungsalgorithmus würde die Sicherheit des
230
RSA-Kryptosystems gefährden. Es ist jedoch unwahrscheinlich, dass ein
231
solcher Algorithmus gefunden wird, da das Problem als schwer
232
angesehen wird.\footnote{[RSA-2191]}
233
234
Ein weiterer möglicher Angriff auf das RSA-Kryptosystem wäre die
235
$e$-te Wurzel $\imod{n}$ zu finden. Da $G \equiv K^e \imod{N}$ ist,
236
wäre $K \equiv \sqrt[e]{K^e} \imod{N}$. Allerdings ist kein Angriff,
237
der so funktioniert, bekannt4. Um zu veranschaulichen, dass bei einer
238
Kongruenzgleichung nicht wie gewohnt die Wurzel gezogen werden kann,
239
betrachte man folgendes Beispiel: $4 \equiv 16 \imod{3}$, aber
240
$\sqrt{4} \neq \sqrt{16} \imod{3}$.
241
242
\subsection{Warum der RSA-Algorithmus funktioniert}
243
Der Geheimtext $G$ wird durch potenzieren mit $e$ gewonnen ($G \equiv K^e \imod{N}$)
244
und der Klartext durch potenzieren mit $d$ ($K \equiv G^d \imod{N}$).
245
Zu zeigen ist, dass
246
$K \equiv K^{e \cdot d} \imod{N}$ mit $ed \equiv 1 \imod{\varphi(N)}$ gilt.
247
248
Es kann folgende Umformung durchgeführt werden:
249
\begin{align*}
250
ed &\equiv 1 \imod{\varphi(N)}\\
251
ed &= 1 + x \cdot \varphi(N) \text{mit } x \in \mathbb{Z}
252
\end{align*}
253
254
Daraus folgt:
255
\[K^{e \cdot d} = K^{1 + x \cdot \varphi(N)} = K \cdot K^{x \cdot \varphi(N)}\]
256
257
Nun wird der \textbf{Satz von Fermat-Euler} als Hilfssatz eingeführt:
258
\begin{mdframed}[tikzsetting={draw=red,ultra thick}, innertopmargin=0.6cm]
259
$K^{\varphi(N)} \equiv 1 \imod{N}$ für $K, N \in \mathbb{N}$ und $ggT(N, K) = 1$
260
\end{mdframed}
261
262
Beweis nach [Reiss], S. 218 f.:
263
\hangindent2em
264
\hangafter=0
265
Es gibt $\varphi(N)$ verschiedene, zu $N$ teilerfremde Reste. Da $K$
266
zu $N$ teilerfremd ist, muss auch jedes der Produkte
267
$K \cdot r_1 , K \cdot r_2 , \dots, K \cdot r_{\varphi(N)}$ zu $N$
268
teilerfremd sein.
269
270
Es gilt:
271
\begin{align*}
272
\prod_{i=1}^{n=\varphi(N)} K \cdot r_i &\equiv \prod_{i=1}^{n=\varphi(N)} r_i \imod{N}\\
273
K^{\varphi(N)} \prod_{i=1}^{n=\varphi(N)} r_i &\equiv \prod_{i=1}^{n=\varphi(N)} r_i \imod{N}
274
\end{align*}
275
276
Da alle $r_i$ teilerfremd zu N sind, kann man durch das Produkt teilen. Daraus ergibt sich:
277
\[K^{\varphi(N)} \equiv 1 \imod{N}\]
278
279
Das bedeutet für den RSA-Algorithmus:
280
\[K \cdot K^{x \cdot \varphi(N)} \equiv K \cdot (K^{\varphi(N)})^x \equiv K \cdot 1^x \equiv K \imod{N}\]
281
282
283