ADS: Algorithmen und Datenstrukturen 2 Teil 10 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 8. Juni 2016 [Letzte Aktualisierung: 29/06/2016, 15:36] 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, V10 8. Juni 2016 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, V10 8. Juni 2016 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, V10 8. Juni 2016 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, V10 8. Juni 2016 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) y -11 -11 3 -2 1 0 x 14 3 -2 1 0 1 ADS 2, V10 8. Juni 2016 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, V10 8. Juni 2016 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 : ∃ (unique) 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, V10 8. Juni 2016 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: 0 0 a+b ≡a +b 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, V10 8. Juni 2016 9 / 22 Beispiel: Gruppen Modulo n a+b +3 0 1 2 mod 3 0 0 1 2 1 1 2 0 2 2 0 1 a∗b ∗3 1 2 mod 3 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, V10 8. Juni 2016 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 Φ(n) = p − 1 Falls p ∈ / P dann Φ(n) < n − 1 P.F. Stadler & C. Höner (Bioinf, Uni LE) ADS 2, V10 8. Juni 2016 11 / 22 PKI-Kryptographie das RSA Kryptosystem P.F. Stadler & C. Höner (Bioinf, Uni LE) ADS 2, V10 8. Juni 2016 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, V10 8. Juni 2016 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, V10 8. Juni 2016 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, V10 8. Juni 2016 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, V10 8. Juni 2016 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, V10 8. Juni 2016 17 / 22 (I) Finden von Primzahlen Primzahltheorem: limn→∞ pi(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, V10 8. Juni 2016 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 ≡ 16 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, V10 8. Juni 2016 19 / 22 Faktorisierung von n = pq: Pollard-Rho i := 1 x1 := Rand (0, n − 1) while True do i := i + 1 ; 2 −1 xi := xi−1 mod n ; 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 P.F. Stadler & C. Höner (Bioinf, Uni LE) y := x1 ADS 2, V10 k := 2 ; 8. Juni 2016 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 3970 8463 4224 P.F. Stadler & C. Höner (Bioinf, Uni LE) xi+1 mod 323 2 3 8 63 92 65 25 ADS 2, V10 d 1 1 1 1 1 19 y 2 3 3 63 63 63 63 8. Juni 2016 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, V10 8. Juni 2016 22 / 22