Algorithmentheorie Randomisierung. Robert Elsässer



Ähnliche Dokumente
3: Zahlentheorie / Primzahlen

Kryptographische Protokolle

3: Primzahlen. 111 S. Lucks Diskr Strukt. (WS 18/19) 3: Primzahlen

VI.3 RSA. - RSA benannt nach seinen Erfindern R. Rivest, A. Shamir und L. Adleman. - vorgestellt erstes Public-Key Verschlüsselungsverfahren

ADS: Algorithmen und Datenstrukturen 2

Bsp: Die kleinsten Carmichael-Zahlen sind 561, 1105, 1729, Es gibt unendlich viele Carmichael-Zahlen (Beweis 1994).

Algorithmische Kryptographie

Diskrete Strukturen Kapitel 5: Algebraische Strukturen (RSA-Verfahren)

Diskreter Logarithmus und Primkörper

VI.4 Elgamal. - vorgestellt 1985 von Taher Elgamal. - nach RSA das wichtigste Public-Key Verfahren

Randomisierte Algorithmen 2. Erste Beispiele

Probabilistische Primzahltests

Public Key Kryptographie mit dem RSA Schema. Karsten Fischer, Sven Kauer

Kryptographische Protokolle

WS 2009/10. Diskrete Strukturen

Kryptographie und Komplexität

Übung Algorithmen und Datenstrukturen

Verschlüsselung durch Exponentiation (Pohlig, Hellman, 1976)

6 Quicksort. die mittlere Laufzeit Θ(n log n) beträgt und. die in der asymptotischen Notation verborgenen Konstanten sehr klein sind.

RSA Parameter öffentlich: N = pq mit p, q prim und e Z RSA Parameter geheim: d Z φ(n)

Übungen zur Vorlesung Systemsicherheit

Wiederholung. Gruppen. Untergruppen. Gruppenisomorphismen. Ordnung: Gruppe, Element Satz von Euler: a ord(g) = 1 Elementordung teilt Gruppenordnung

Public Key Kryptographie

13. Woche: NP-Vollständigkeit Satz von Cook-Levin Anwendungen in der Kryptographie

PRIMES is in P. Ein Vortrag von Holger Szillat.

Regine Schreier

Aufgabe der Kryptografie

Algorithmen und Datenstrukturen

Zahlentheorie, Arithmetik und Algebra 1

Zahlentheorie, Arithmetik und Algebra I

Abschnitt: Algorithmendesign und Laufzeitanalyse

Zufallsprimzahlen und eine Revolution in der Kryptographie Stefan Edelkamp

Beispiel für simultane Kongruenz

Erweiterter Euklidischer Algorithmus

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Probabilistische Algorithmen

Einführung in die Kryptographie

Programmieren und Problemlösen

Vortrag zum Proseminar: Kryptographie

3 Public-Key-Kryptosysteme

Kryptographie und Komplexität

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Spezielle Sortierverfahren Autor: Sven Schuierer

Kryptographie - eine mathematische Einführung

Public-Key Kryptographie mit dem RSA Schema. Torsten Büchner

Randomisierte Algorithmen am Beispiel Quicksort

Einführung in die Kryptographie

Stichpunktezettel fürs Tutorium

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

RSA-Verfahren Schnelle Ver- / Entschlüsselung Zusammenhang mit dem Faktorisierungsproblem. RSA-Verfahren. Herwig Stütz

Public Key Kryptographie

Praktikum Diskrete Optimierung (Teil 11)

n ϕ n

Kryptographie und Komplexität

3. Suchen. Das Suchproblem. Suche in Array. Lineare Suche. 1 n. i = n Gegeben Menge von Datensätzen.

Vorlesung Sicherheit

Diskrete Mathematik 1

Public-Key-Kryptographie

Literatur. ISM SS 2017 Teil 8/Asymmetrische Verschlüsselung

El. Zahlentheorie I: Der kleine Satz von Fermat

Stichpunktezettel fürs Tutorium

Kryptographie. ein erprobter Lehrgang. AG-Tagung Informatik, April 2011 Alfred Nussbaumer, LSR für NÖ. LSR für NÖ, 28. April 2011 Alfred Nussbaumer

4 Kryptologie. Übersicht

Kryptologie. Bernd Borchert. Univ. Tübingen SS Vorlesung. Teil 11. Primzahltests: Fermat, Miller-Rabin

Hallo Welt für Fortgeschrittene

Algorithmen und Datenstrukturen SS Übungsblatt 1: Grundlagen

6.2 Asymmetrische Verschlüsselung

Kryptographie. Nachricht

Digitale Signaturen. Einführung und das Schnorr Signatur Schema. 1 Digitale Signaturen Einführung & das Schnorr Signatur Schema.

Vorlesung Sicherheit

Einführung in die asymmetrische Kryptographie

Zahlentheorie, Arithmetik und Algebra

Kapitel 2. Elementare Zahlentheorie Primfaktorzerlegung

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

4 Das RSA public-key System der Kryptographie 5

$Id: ring.tex,v /05/03 15:13:26 hk Exp $

11. Das RSA Verfahren

Transkript:

Algorithmentheorie 03 - Randomisierung Robert Elsässer

Randomisierung Klassen von randomisierten Algorithmen Randomisierter Quicksort Randomisierter Primzahltest Kryptographie 2

1. Klassen von randomisierten Algorithmen Las Vegas Algorithmen immer korrekt; erwartete Laufzeit Beispiel: randomisierter Quicksort Monte Carlo Algorithmen (mostly correct): wahrscheinlich korrekt; garantierte Laufzeit Beispiel: randomisierter Primzahltest 3

2. Quicksort Unsortierter Bereich A[p,r] in einem Array A A[p r-1] x A[p...m 1] Quicksort x A[m + 1...r] Quicksort 4

Quicksort Algorithmus: Quicksort Input: unsortierter Bereich [p, r] in Array A Output: sortierter Bereich [p, r] in Array A 1 if r > p 2 then wähle Pivotelement x = A[r] 3 m = partition(a, p, r) /* Teile A bzgl. x auf: A[p],...,A[m 1] x A[m + 1],...,A[r] */ 4 Quicksort(A, p, m - 1) Quicksort (A, m + 1, r) 5

Quicksort Partition ( A,p,r ) 1. 2. 3. 4. 5. 6. 7. 8. [] x A r i p-1 for j p to r-1 do if A[] j x then i i A i A[ i + 1] A[ r ] return i + 1 + 1 [] A[ j] 6

Quicksort 2 8 7 1 3 5 6 4 Partition ( A,p,r ) 2 8 7 1 3 5 6 4 2 8 7 1 3 5 6 4 1. 2. 3. 4. 5. 6. 7. 8. [] x A r i p-1 for j p to r-1 do if A[] j x then i A i A[ i + 1] A[ r ] return i + 1 i + 1 [] A[ j] 2 8 7 1 3 5 6 4 7

Quicksort 2 1 7 8 3 5 6 4 Partition ( A,p,r ) 2 1 3 8 7 5 6 4 2 1 3 8 7 5 6 4 2 1 3 8 7 5 6 4 1. 2. 3. 4. 5. 6. 7. 8. [] x A r i p-1 for j p to r-1 do if A[] j x then i A i A[ i + 1] A[ r ] return i + 1 i + 1 [] A[ j] 2 1 3 4 7 5 6 8 8

Der Aufteilungsschritt partition(a, p, r): liefert den Index des Pivotelements in A ausführbar in Zeit O(r p) 9

Worst-Case-Eingabe n Elemente: Laufzeit: (n-1) + (n-2) + + 2 + 1 = n(n-1)/2 10

3. Randomisierter Quicksort Algorithmus: Quicksort Input: unsortierter Bereich [p, r] in Array A Output: sortierter Bereich [p, r] in Array A 1 if r > p 2 then wähle zufälliges Pivotelement x = A[i] im Bereich [l, r] 3 tausche A[i] mit A[r] 4 m = partition(a, p, r) /* Teile A bzgl. x auf: A[p],...,A[m 1] p A[m + 1],...,A[r] */ 5 Quicksort(A, p, m - 1) 6 Quicksort(A, m + 1, r) 11

Analyse 1 n Elemente; sei S i das i-t kleinste Element Mit WSK 1/n ist S 1 Pivotelement: Teilprobleme der Größen 0 und n-1 Mit WSK 1/n ist S k Pivotelement: Teilprobleme der Größen k-1 und n-k Mit WSK 1/n ist S n Pivotelement: Teilprobleme der Größen n-1 und 0 12

Analyse 1 Erwartungswert für die Laufzeit: T 1 n n ( n) = ( T ( k 1) + T ( n k) ) + Θ( n) k = 1 = 2 n n k = 1 T ( k 1) + Θ( n) = ( log n) O n 13

Analyse 2 Erwartete Anzahl der Vergleiche: X ij = 1 falls Si mit S j 0 sonst verglichen wird n n E X = ij E[ X ij ] i= 1 j> i i= 1 j> i p ij = WSK S i wird mit S j verglichen E [ X ] = 1 p + 0 (1 p ) = ij ij ij p ij 14

Berechnung von p ij S i wird mit S j verglichen gdw S i oder S j in π vor allen anderen S l, i<l<j, als Pivotelement gewählt wird. {S i S l S j } Jedes der Elemente S i,, S j wird mit gleicher WSK als erstes als Pivotelement gewählt. p ij = 2/(j-i+1) 15

16 Analyse 2 Erwartete Anzahl der Vergleiche: = = = + = = > = > = = = + = n k n k n i i n k n i i j n i i j ij n i k n k k i j p 1 1 1 1 2 1 1 1 1 2 1 2 2 1 2 n k H n k n ln 1/ 1 = =

4. Primzahltest Definition: Zahl p 2 ist genau dann prim, wenn aus a p folgt a = 1 oder a = p. Wir betrachten Primzahltests für Zahlen n 2. Algorithmus: Deterministischer Primzahltest (naiv) Input: Eine ganze Zahl n 2 Output: Antwort auf die Frage: Ist n prim? if n = 2 then return true if n gerade then return false for i = 1 to n / 2 do if 2i + 1 teilt n then return false return true Laufzeit: Θ( n) 17

Primzahltest Ziel: Randomisiertes Verfahren in polynomieller Zeit ausführbar falls Ausgabe nicht prim, dann ist n nicht prim falls Ausgabe prim, dann ist n nicht prim höchstens mit Wahrscheinlichkeit p>0 k Iterationen: n ist nicht prim mit Wahrscheinlichkeit p k 18

Primzahltest Fakt: Für jede ungerade Primzahl p gilt 2 p-1 mod p = 1. Beispiele: p = 17, 2 16 1 = 65535 = 17 * 3855 p = 23, 2 22 1 = 4194303 = 23 * 182361 Einfacher Primzahltest: 1 Berechne z = 2 n-1 mod n 2 if z = 1 3 then n ist möglicherweise prim 4 else n ist definitiv nicht prim Vorteil: Benötigt nur polynomielle Zeit 19

Einfacher Primzahltest Definition: Zahl n 2 ist eine Pseudoprimzahl zur Basis 2, wenn n nicht prim und 2 n-1 mod n = 1. Beispiel: n = 11 * 31 = 341 2 340 mod 341 = 1 20

Randomisierter Primzahltest Satz: (kleiner Fermat) Ist p prim und 0 < a < p, dann ist a p-1 mod p = 1. Beispiel: n = 341, a = 3 3 340 mod 341 = 56 1 Algorithmus: Randomisierter Primzahltest 1 1 Wähle a im Bereich [2, n-1] zufällig 2 Berechne a n-1 mod n 3 if a n-1 mod n =1 4 then n ist möglicherweise prim 5 else n ist definitiv nicht prim Prob(n ist nicht prim, aber a n-1 mod n = 1 )? 21

Problem: Carmichael-Zahlen Definition: Zahl n 2 ist eine Pseudoprimzahl zur Basis a, wenn n nicht prim und a n-1 mod n = 1. Definition: Eine Zahl n 2 heißt Carmichael-Zahl, falls sie nicht prim ist und für alle a mit ggt(a, n) = 1 a n-1 mod n = 1. Beispiel: Kleinste Carmichael-Zahl: 561 = 3 * 11 * 17 22

Randomisierter Primzahltest 2 Satz: Ist p prim und 0 < a < p, dann hat die Gleichung a 2 mod p = 1 genau die Lösungen a = 1 und a = p 1. Definition: a heißt nichttriviale Quadratwurzel mod n, falls a 2 mod n = 1 und a 1, n 1. Beispiel: n = 35 6 2 mod 35 = 1 23

Schnelle Exponentiation Idee: Teste während der Berechnung von a n-1, 0 < a < n zufällig, ob es eine nichttriviale Quadratwurzel mod n gibt. Verfahren zur Berechnung von a n : Fall 1: [n ist gerade] a n = a n/2 * a n/2 Fall 2: [n ist ungerade] a n = a (n-1)/2 * a (n-1)/2 * a 24

Schnelle Exponentiation Beispiel: a 62 = (a 31 ) 2 a 31 = (a 15 ) 2 * a a 15 = (a 7 ) 2 * a a 7 a 3 = (a 3 ) 2 * a = (a) 2 * a Laufzeit: O(log 2 a n log n) 25

Schnelle Exponentiation boolean isprobablyprime; power(int a, int p, int n){ /* berechnet a p mod n und prüft, ob bei der Berechnung ein x auftritt mit x 2 mod n = 1 und x 1, n-1 */ if (p == 0) return 1; x = power(a, p/2, n) result = (x * x) % n; 26

Schnelle Exponentiation /* prüfe ob x 2 mod n = 1 und x 1, n-1 */ if (result == 1 && x!= 1 && x!= n 1 ) isprobablyprime = false; if (p % 2 == 1) result = (a * result) % n; } return result; Laufzeit: O(log 2 n log p) 27

Randomisierter Primzahltest 2 primetest(int n) { /* führt den randomisierten Primzahltest für ein zufällig a aus */ a = random(2, n-1); isprobablyprime = true; result = power(a, n-1, n); if (result!= 1!isProbablyPrime) return false; else return true; } 28

Randomisierter Primzahltest 2 Satz: Ist n nicht prim, so gibt es höchstens n 9 4 Zahlen 0 < a < n, für die Algorithmus primetest versagt. 29

5. Exkurs Public Key Verschlüsselungssysteme 30

Verschlüsselungssysteme mit geheimen Schlüsseln Traditionelle Verschlüsselung von Nachrichten Nachteile: 1. Schlüssel k muss zwischen A und B vor Übersendung der Nachricht ausgetauscht werden. 2. Für Nachrichten zwischen n Parteien sind n(n-1)/2 Schlüssel erforderlich. 31

Verschlüsselungssysteme mit geheimen Schlüsseln Vorteile: Ver- und Entschlüsselung ohne spürbaren Geschwindigkeitsverlust 32

Aufgabe von Sicherheitsdiensten Gewährleistung von Vertraulichkeit der Übertragung Integrität der Daten Authentizität des Senders Verbindlichkeit der Übertragung 33

Public-Key Verschlüsselungssysteme Diffie and Hellman (1976) Idee: Jeder Teilnehmer A besitzt zwei Schlüssel: 1. einen öffentlichen Schlüssel P A, der jedem anderen Teilnehmer zugänglich gemacht wird. 2. einen geheimen Schlüssel S A, der nur A bekannt ist. 34

Public-Key Verschlüsselungssysteme D = Menge der zulässigen Nachrichten, z.b. Menge aller Bitstrings endl. Länge P A 1 1 (), S (): D D A Drei Bedingungen: 1. P A (), S A () effizient berechenbar 2. S A (P A (M)) = M und P A (S A (M)) = M 3. S A () nicht aus P A () zu berechnen (mit realisierbarem Aufwand) 35

Verschlüsselung im Public-Key System A schickt eine Nachricht M an B: 36

Verschlüsselung im Public-Key System 1. A verschafft sich B`s öffentlichen Schlüssel P B (aus einem öffentlichen Verzeichnis oder direkt von B). 2. A berechnet die chiffrierte Nachricht C = P B (M) und sendet C an B. 3. Nachdem B die Nachricht C empfangen hat, dechiffriert B die Nachricht mit seinem geheimen Schlüssel S B : M = S B (C) 37

Erstellen einer digitalen Unterschrift A schickt eine digital unterzeichnete Nachricht M an B: 1. A berechnet die digitale Unterschrift σ für M mit Hilfe des geheimen Schlüssels: σ = S A (M ) 2. A schickt das Paar (M, σ ) an B. 3. Nach Erhalt von (M, σ ) überprüft B die digitale Unterschrift: P A (σ) = M σ kann von jedem mit P A überprüft werden (z.b. für Schecks). 38

RSA-Verschlüsselungssysteme R. Rivest, A. Shamir, L. Adleman Erstellen der öffentlichen und geheimen Schlüssel 1. Man wähle zufällig zwei etwa gleich große Primzahlen p und q mit je l+1 Bits (l 500). 2. Sei n = pq 3. Sei e eine natürliche Zahl, die teilerfremd zu (p 1)(q 1) ist. 4. Berechne d = e -1 d*e 1 (mod (p 1)(q 1 )) 39

RSA-Verschlüsselungssysteme 5. Veröffentliche P = (e, n) als öffentlichen Schlüssel 6. Behalte S = (d, n) als geheimen Schlüssel Zerlege Nachricht (binär kodiert) in Blöcke der Länge 2l. Fasse jeden Block M als Binärzahl auf: 0 M < 2 2l P(M) = M e mod n S(C) = C d mod n 40

Multiplikative Inverse Satz: (ggt-rekursions-satz) Für alle Zahlen a und b mit b>0 gilt ggt(a,b) = ggt(b, a mod b). Algorithmus: Euklid Input: Zwei ganze Zahlen a und b mit b 0 Output: ggt(a,b) if b = 0 then return a else return Euklid(b, a mod b) 41

Multiplikative Inverse Algorithmus: Erw-Euklid Input: Zwei ganze Zahlen a und b mit b 0 Output: ggt(a,b) und zwei ganze Zahlen x und y mit xa + yb = ggt(a,b) if b = 0 then return (a, 1, 0); (d, x, y ) := Erw-Euklid(b, a mod b); x := y ; y := x a/b y ; return (d, x, y); Anwendung: a=(p-1)(q-1) b=e Zahlen x und y mit x(p-1)(q-1) + ye = ggt((p-1)(q-1),e) = 1 42