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