ADS: Algorithmen und Datenstrukturen 2 - Teil 11

Werbung
ADS: Algorithmen und Datenstrukturen 2
Teil 11
Prof. Peter F. Stadler & Dr. Christian Höner zu Siederdissen
Bioinformatik/IZBI
Institut für Informatik
& Interdisziplinäres Zentrum für Bioinformatik
Universität Leipzig
14. Juni 2017
[Letzte Aktualisierung: 14/06/2017, 01:45]
1 / 22
Zahlentheorie und Kryptographie
Public-Key Kryptographie mittels RSA (Rivest, Shamir, Adleman)
Verschlüsseln von Nachrichten zwischen zwei Parteien
Geheime Schlüssel zum Entschlüsseln
Öffentliche Schlüssel zum Verschlüsseln
Signaturen für Nachrichten
leicht zu verifizieren
Nicht fälschbar
Kleinste Änderungen in Nachricht erkennbar
Lustige Warnung: es gibt keinen Beweis das dieses Verfahren sicher ist
Introduction to Algorithms, Cormen et al, Number-Theoretic Algorithms
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
2 / 22
Grundlagen
Große Eingaben für diese VL-Einheit sind groß in Bezug die Anzahl
Bit die nötig sind, die Eingabe zu kodieren
Wir reden typischerweise über eine Integer-zahl, aber diese hat 512
oder mehr Bit
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
3 / 22
Grundlagen
p ∈ N = {0, 1, . . . } is prim, wenn 1 und p die einzigen Teiler von p
sind
P = {2, 3, 5, 7, 11, 13 . . . } ⊂ N ist die Menge aller Primzahlen
wir schreiben d|a, falls ∃k ∈ Z : a = kd
Equivalenzklasse modulo n: [a]n = {a + kn : k ∈ Z}
wir schreiben a ≡ b mod n falls
a = qn + r und b = q 0 n + r
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
4 / 22
Faktorisierung: Grundlegendes
Einzigartige Faktorisierung: ∀a ∈ N : a = p1e1 · · · pkek , pi ∈ P
größter gemeinsamer Teiler (d = ggT (a, b) = ax + by ):
Euklid (a,b)
if b = 0 then
Return (a,1,0)
end
;
(d,y’,x) := Euklid (b, a mod b) ;
Return (d, x, y 0 − ba/bcx) ;
mit a > b ≥ 1 und b < Fk+1 werden < k rekursive Aufrufe
durchgeführt
die Laufzeit von Euklid ist: O(β) arithmetische Operationen, O(β 3 )
Bitoperationen
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
5 / 22
Beispiel: Euklid
a
99
78
21
15
6
3
b
78
21
15
6
3
0
ba/bc
1
3
1
2
2
-
d
3
3
3
3
3
3
P.F. Stadler & C. Höner (Bioinf, Uni LE)
x
-11
3
-2
1
0
1
y
14
-11
3
-2
1
0
ADS 2, V11
14. Juni 2017
6 / 22
Teilerfremde Zahlen
a und b sind teilerfremd falls Euklid(a, b).d = 1
Beispiel: 8 hat Teiler 1,2,4,8 und 15 hat Teiler 1,3,5,15.
Falls a, b teilerfremd zu p, dann ab teilerfremd zu p.
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
7 / 22
(IV) Uhren- oder Modulo Arithmetik
Gruppe:
Gruppe (S, ⊕) mit Menge S und binärer Operation ⊕ auf S.
Abgeschlossen: ∀a, b ∈ S : a ⊕ b ∈ S
Id: ∃e ∈ S : e ⊕ a = a ⊕ e = a
Assoziativ: ∀a, b, c ∈ S : (a ⊕ b) ⊕ c = a ⊕ (b ⊕ c)
Inverses: ∀a ∈ S : ∃ (ein) b ∈ S : a ⊕ b = b ⊕ a = e
Beispiel: (Z, +), ganze Zahlen mit Addition, e = 0, Inverses: −a.
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
8 / 22
(IV) Modulo Arithmetik
Endliche Gruppe:
Sei n eine natürliche Zahl
Zn sei die Menge der Zahlen {0 . . . n − 1}
Darauf lassen sich zwei nützliche Gruppen definieren:
⊕ = +:
⊕ = ×:
(Zn , +n )
(Zn , ×n )
Sei a ≡ a0 mod n, b ≡ b 0 mod n:
a + b ≡ a0 + b 0 mod n und
ab ≡ a0 b 0 mod n
in der jeweiligen Gruppe
Multiplikative Gruppe modulo n: Z∗n = {a ∈ Zn : ggT(a, n) = 1}
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
9 / 22
Beispiel: Gruppen Modulo n
a ∗ b mod 3
a + b mod 3
+3
0
1
2
0
0
1
2
1
1
2
0
2
2
0
1
∗3
1
2
1
1
2
2
2
1
Sehen sie die neutralen Elemente und die inversen Elemente?
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
10 / 22
Eulers Phi
Y
Φ(n) = n
p:p∈P∧p|n
1
1−
p
Falls p ∈ P dann Z∗p = {1, 2, . . . , p − 1}
und Φ(p) = p − 1
Falls p ∈
/ P dann Φ(n) < n − 1
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
11 / 22
PKI-Kryptographie
das RSA Kryptosystem
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
12 / 22
Ein paar Begriffe und Definitionen
Alice und Bob wollen kommunizieren
Eve (“Eavesdropper”) möchte lauschen (Eve arbeitet für die NSA)
Öffentlicher Schlüssel: P (Alice: PA , Bob: PB )
Geheimer Schlüssel: S (Alice: SA , Bob: SB )
PA (·) (etc) seien die entsprechenden Funktionen
Sei M ∈ D die zu sendende Nachricht
Es gelte:
M = SA (PA (M))
M = PA (SA (M))
Wir hoffen: SA kann nur von Alice in vertretbarer Zeit berechnet
werden!
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
13 / 22
Bob
verschlüsselt
M
PA (M)
Alice
entschlüsselt
C = PA (M)
SA (C )
M
Eve belauscht C
?
M = NSA(C )
Es gibt keine bekannte schnelle Funktion NSA die C in M ohne Kenntnis
von SA verwandelt
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
14 / 22
Das RSA Kryptosystem
In sechs Schritten zu sicherer Kommunikation:
1
Wähle zufällige Primzahlen p, q, p 6= q, beide ≥ 512–2048 bit
p = 11, q = 13
2
Berechne n = pq
n = 143
3
Wähle e, ungerade und klein, relativ prim zu (p − 1)(q − 1)
(zB 216 + 1 = 65537)
e = 23 (rel. prim zu 120)
4
Berechne d mit de ≡ 1 mod (p − 1)(q − 1)
d = 47, 47 ∗ 23 mod 120 = 1
5
Öffentlicher Schlüssel: P = (e, n)
P = (23, 143)
6
Geheimer Schlüssel: S = (d, n)
S = (47, 143)
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
15 / 22
Beispiel
1
Verschlüsseln von m = 7
2
c ≡ me mod n
3
Entschlüsseln von c = 2
4
m ≡ c d mod n
2 ≡ 723 mod 143
7 ≡ 247 mod 143
Es gibt nicht so viele kleine Primzahlen das sich viele Beispiele finden
ließen.
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
16 / 22
Korrektheit von RSA
für alle m ∈ D gilt:
P(S(m)) = S(P(m)) = med mod n
ed = 1 + k(p − 1)(q − 1)
med = med−1 m = mk(p−1)(q−1) m = (mp−1 )k(q−1) m
≡ 1k(q−1) m ≡ m mod p
analog für
mod q
damit auch für
mod pq = n
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
17 / 22
(I) Finden von Primzahlen
Primzahltheorem: limn→∞
π(n)
n/ ln n
=1
Wkeit das k ∈ N prim: 1/ ln n
Faktorisieren von k ist viel zu langsam (kommt noch!)
Falls k prim, dann: ak−1 ≡ 1 mod k
(∀a ∈ {1 . . . k − 1})
Für a = 2 gilt das fast immer, die Fehlerrate ist 10−20 bei 512-bit
Zahlen!
Allerdings gibt es sog. Carmichael-Zahlen bei denen der Test immer
versagt (also falsch “prim” ausgibt)
dort hilft der Miller-Rabin Test weiter
Wir können also sehr leicht grosse Primzahlen finden durch zufällige Wahl
eines k und dann Primzahltest
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
18 / 22
Beispiel
a = 2 k = 47
246 ≡ 1 mod 47
a ∈ {2 . . . 46} : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
a = 2 k = 49 = 7 ∗ 7
248 ≡ 15 mod 49
a ∈ {2 . . . 48} : [15, 43, 29, 43, 8, 0, 43, 36, 8, 15, 22, 15, 0,
36, 8, 22, 1, 1, 22, 0, 29, 29, 36, 36, 29, 29,
0, 22, 1, 1, 22, 8, 36, 0, 15, 22, 15, 8, 36, 43, 0, 8, 43, 29, 43, 15, 1]
Wir müssen allerdings nur für a = 2 testen um mit großer Sicherheit k als
Prim bestimmen zu können
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
19 / 22
Faktorisierung von n = pq: Pollard-Rho
i := 1 x1 := Rand (0, n − 1)
while True do
i := i + 1 ;
2 − 1 mod n ;
xi := xi−1
d := ggT (y − xi , n) ;
if d 6= 1 und d 6= n then
print d ;
end
if i = k then
y := xi ;
k := 2k ;
end
end
y := x1
k := 2 ;
erwartete Zeit: O(n1/4 )
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
20 / 22
Beispiel: Pollard-Rho
Sei n = 323 = 19 ∗ 17
i
1
2
3
4
5
6
7
xi+1 = (xi2 − 1)
3
8
63
3968
8463
4224
P.F. Stadler & C. Höner (Bioinf, Uni LE)
xi+1 mod 323
2
3
8
63
92
65
25
ADS 2, V11
d
1
1
1
1
1
19
y
2
3
3
63
63
63
63
14. Juni 2017
21 / 22
Zusammenfassung
Das RSA-Kryptosystem basiert auf einfacher Zahlentheorie
Das Finden von zufälligen Primzahlen ist einfach
Es gibt keine bekannte, schnelle Methode n = pq zu faktorisieren
Es gibt aber auch keinen Beweis der Sicherheit (!)
RSA wird typischerweise benutzt um einen symmetrischen
Session-Key zu verschlüsseln
“Basis”-RSA hat einige Schwachpunkte, die allerdings in guten
Implementationen nicht zum Tragen kommen:
es gilt aber: baut euch RSA nicht selbst!
P.F. Stadler & C. Höner (Bioinf, Uni LE)
ADS 2, V11
14. Juni 2017
22 / 22
Herunterladen