Kryptographische Protokolle Lerneinheit 2: Generierung von Primzahlen Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester 2017 3.4.2017 Einleitung Einleitung Diese Lerneinheit beschäftigt sich mit der Generierung von Primzahlen. Es interessieren folgende Fragen: • Wie hoch ist die Chance, dass eine zufällig gezogene Zahl eine Primzahl? • Wie kann man überprüfen, ob eine Zahl eine Primzahl ist? • Gibt es effiziente Algorithmen für Primzahltests? Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 2 / 45 Wissenswertes über Primzahlen Wissenswertes über Primzahlen Definition. π(n) steht für die Anzahl der Primzahlen, die kleiner-gleich n sind Satz 1 (Primzahlsatz) Es gilt für alle ganzen Zahlen n: π(n) ≈ n ln(n) Dies bedeutet, daß eine zufällig aus der Menge {1, 2, . . . , n} gezogene Zahl mit Wahrscheinlichkeit 1/ ln(n) eine Primzahl ist. Die Wahrscheinlichkeit erhöht sich auf 2/ ln(n), wenn ausschließlich ungerade Zahlen zieht. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 3 / 45 Wissenswertes über Primzahlen Wissenswertes über Primzahlen (Forts.) n π(n) n/ ln(n) 100 1000 10000 100000 1000000 25 168 1229 9592 78498 21.7 144.8 1085.8 8685.9 72382.2 Zieht man eine ungerade Zahl aus {1, 3, . . . , 2256 − 1} zufällig, dann ist sie mit Wahrscheinlichkeit 2/ ln(2256 ) ≈ 1/88.7 eine Primzahl. Mit anderen Worten: Im Schnitt muß man 89 ungerade Zahlen unter Gleichverteilung ziehen, um eine Primzahl aus obiger Menge zu finden. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 4 / 45 Ein einfacher Primzahltest Ansatz Ein einfacher Primzahltest Satz von Fermat: Ist n eine Primzahl, dann gilt für alle a ∈ Z∗n : an−1 ≡ 1 (mod n). Konsequenz: Existiert ein a ∈ {1, 2, . . . , n − 1} so dass an−1 ̸≡ 1 (mod n), dann ist n mit Sicherheit keine Primzahl. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Ein einfacher Primzahltest Generierung von Primzahlen 5 / 45 Ansatz Pseudo-Primzahl-Test PseudoPrime(n, s) Input: Ganze Zahlen n, s, wobei n ≥ 3 ungerade und s > 0 Output: Primzahl oder Keine Primzahl 1 for i := 1 to s do 2 a := Random(1, n − 1) 3 if gcd(a, n) ̸= 1 then 4 return Keine Primzahl 5 if an−1 ̸≡ 1 (mod n) then 6 return Keine Primzahl 7 return Primzahl Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 6 / 45 Ein einfacher Primzahltest Analyse Analyse von PseudoPrime(n, s) Ziel: Bewertung der Qualität von PseudoPrime(n, s) Definition. Sei n eine natürliche Zahl. Die Zahl a ∈ Z∗n ist ein Beweis, dass n eine zusammengesetzte Zahl ist, falls an−1 ̸≡ 1 (mod n). Wunsch: Es gibt viele Beweise, dass n eine zusammengesetzte Zahl ist ⇝ gute Chance, dass eine solche Zahl gezogen wird Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Ein einfacher Primzahltest Generierung von Primzahlen 7 / 45 Analyse Analyse von PseudoPrime(n, s) (Forts.) Satz 2 Sei n eine beliebige natürliche Zahl. Angenommen, es existiert ein Beweis, dass n eine zusammengesetzte Zahl ist. Dann sind mindestens die Hälfte der Zahlen in Z∗n Beweise, dass n eine zusammengesetzte Zahl ist. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 8 / 45 Ein einfacher Primzahltest Analyse Analyse von PseudoPrime(n, s) (Forts.) Beweis. Sei n ∈ N beliebig gewählt. Betrachte die Menge B = {a ∈ Z∗n | an−1 ≡ 1 (mod n)} Für alle a, b ∈ B gilt: (a · b)n−1 ≡ an−1 · bn−1 ≡ 1 · 1 ≡ 1 (mod n) Folglich ist auch a · b ∈ B Also ist B abgeschlossen unter der Multiplikation modulo n Laut ZTK (Satz 9.9) ist B eine Untergruppe von Z∗n Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Ein einfacher Primzahltest Generierung von Primzahlen 9 / 45 Analyse Analyse von PseudoPrime(n, s) (Forts.) Angenommen, es existiert ein Beweis a ∈ Z∗n , dass n eine zusammengesetzte Zahl ist. Da a ∈ / B, ist B eine echte Untergruppe von Z∗n , d.h., B ⊊ Z∗n . Wegen ZTK (Satz 10.2) muss ∥B∥ ein Teiler von ∥Z∗n ∥ sein. Hieraus folgt, dass ∥B∥ ≤ Also gibt es mindestens Zahl ist. Prof. Dr. C. Karg (HS Aalen) ∥Z∗n ∥ . 2 ∥Z∗n ∥ 2 Beweise, dass n eine zusammengesetzte Kryptographische Protokolle Generierung von Primzahlen 10 / 45 Ein einfacher Primzahltest Analyse Analyse von PseudoPrime(n, s) (Forts.) Satz 3 Sei n eine beliebige natürliche Zahl. Angenommen, es existiert ein Beweis, dass n eine zusammengesetzte Zahl ist. Dann ist die Wahrscheinlichkeit, dass PseudoPrime(n, s) die Zahl n als Primzahl einstuft, ist höchstens 21s . Bemerkungen: • Die Wahl von s beeinflusst die Fehlerwahrscheinlichkeit. • Die Fehlerwahrscheinlichkeit nimmt exponentiell in s ab. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Ein einfacher Primzahltest Generierung von Primzahlen 11 / 45 Analyse Analyse von PseudoPrime(n, s) (Forts.) Beweis. Sei n ∈ N eine Zahl, für die ein Beweis für deren Zusammengesetztheit existiert. Betrachte einen Durchlauf der for Schleife von PseudoPrime(n, s) und die gezogene Zufallszahl a. n wird als zusammengesetzte Zahl eingestuft, falls 1. a ein Beweis ist, dass n zusammengesetzt ist, oder 2. a ∈ / Z∗n , d.h., gcd(a, n) > 1 Beide Fälle sind disjunkt. Die Anzahl der Zahlen in {1, . . . , n − 1}, die einen der beiden Fälle erfüllen ist: ∥Z∗n ∥ − ∥B∥ + (n − 1) − ∥Z∗n ∥ | {z } | {z } Fall 1 Prof. Dr. C. Karg (HS Aalen) Fall 2 Kryptographische Protokolle Generierung von Primzahlen 12 / 45 Ein einfacher Primzahltest Analyse Analyse von PseudoPrime(n, s) (Forts.) Die Wahrscheinlichkeit, dass in einem Schleifendurchlauf die Zahl n als zusammengesetzte Zahl klassifiziert wird, ist: (∥Z∗n ∥ − ∥B∥) + (n − 1 − ∥Z∗n ∥) ≥ n−1 = = ≥ = Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Ein einfacher Primzahltest ∥Z∗n ∥ 2 + (n − 1 − ∥Z∗n ∥) n−1 ∗ n − 1 − ∥Z2n ∥ n−1 ∥Z∗n ∥ 1− 2(n − 1) ∥Z∗n ∥ 1− 2∥Z∗n ∥ 1 2 Generierung von Primzahlen 13 / 45 Analyse Analyse von PseudoPrime(n, s) (Forts.) Die Wahrscheinlichkeit, dass n in einem Schleifendurchlauf nicht als zusammengesetzt erkannt wird, ist demnach höchstens 12 . Damit n als Primzahl eingestuft wird, muss n alle s Schleifendurchläufe passieren, ohne als zusammengesetzte Zahl erkannt zu werden. Da die Schleifendurchläufe stochastisch unabhängig von einander sind, ( 1 )s ist die Wahrscheinlichkeit hierfür höchstens 2 . Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 14 / 45 Ein einfacher Primzahltest Bemerkungen Bemerkungen zu PseudoPrime(n, s) • Der Fehler von PseudoPrime(n, s) ist einseitig: ▷ PseudoPrime(n, s)=“Keine Primzahl” ⇝ n definitiv keine Primzahl ▷ PseudoPrime(n, s)=“Primzahl” ⇝ n vermutlich eine Primzahl. • Die Laufzeit von PseudoPrime(n, s) ist polynomial in log2 n und s. • Es gibt zusammengesetzte Zahlen, die von PseudoPrime(n, s) als Primzahl eingestuft werden. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 15 / 45 Carmichael Zahlen Carmichael Zahlen Definition. Eine zusammengesetzte Zahl nennt man Carmichael Zahl, falls an−1 ≡ 1 (mod n) für alle a ∈ Z∗n gilt. Bemerkungen: • Es gibt unendlich viele Carmichael Zahlen. • Die Folge der Carmichael Zahlen beginnt mit 561, 1105, 1729, 2465, 2821, 6601, 8911, 10585, . . . • Carmichael Zahlen sind extrem selten. Es gibt z.B. nur 255 Carmichael Zahlen, die kleiner als 108 sind. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 16 / 45 Carmichael Zahlen Carmichael Zahlen und PseudoPrime(n, s) Fakt: Eine Carmichael Zahl wird von PseudoPrime(n, s) nur als zusammengesetzte Zahl erkannt, wenn ein a mit gcd(a, n) > 1 gezogen wird. Dies ist sehr unwahrscheinlich. Ziel: Verbesserung des Primzahltests, so dass auch Carmichael Zahlen erkannt werden. Ansatz: Tuning von PseudoPrime(n, s) durch Einbau eines zusätzlichen Tests, der für alle zusammengesetzten Zahlen funktioniert. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 17 / 45 Quadratwurzeln Quadratwurzeln Definition. Sei n ∈ N beliebig gewählt. Die Zahl x ∈ Z∗n nennt man Quadratwurzel von 1 (mod n), falls x2 ≡ 1 (mod n). Bemerkung. Für alle n ∈ N gilt: −1 ≡ n − 1 (mod n). Wissen aus Lerneinheit 1: Falls p > 2 eine Primzahl ist, dann sind 1 und p − 1 die einzigen Quadratwurzeln von 1 (mod p) in Z∗p . Folgerung. Besitzt n eine Quadratwurzel x von 1 (mod n) mit x ̸≡ ±1 (mod n), dann ist n keine Primzahl. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 18 / 45 Miller Rabin Primzahltest Solide Beweise Solide Beweise Definition. Sei n > 1 beliebige ungerade natürliche Zahl. Wähle r, u ∈ N, so dass r ≥ 1, u ungerade und n − 1 = 2r · u. Die Zahl a ∈ Z∗n ist ein solider Beweis, dass n eine zusammengesetzte Zahl ist, falls (1) au ̸≡ ±1 (mod n) i (2) Für alle i = 1, . . . , r − 1 gilt: a2 u ̸≡ −1 (mod n) Bemerkungen: • Für jede ungerade ganze Zahl n existiert ein r und u, so dass n − 1 = 2r · u. • Die Berechnung von r und u gemäß obiger Definition ist anhand der Binärdarstellung von n − 1 einfach durchzuführen. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 19 / 45 Solide Beweise Solide Beweise (Forts.) Beispiel. Gegeben ist die Zahl n = 96583122364964211633. Es gilt: n − 1 = 6036445147810263227 · 24 . Also ist u = 6036445147810263227 und r = 4. Betrachte a = 2. Es gilt: au mod n 1 a2 u mod n 2 a2 u mod n 3 a2 u mod n = = = = 66201320698275764447 96583122364964211505 16384 268435456 ̸ = ̸= ̸ = ̸ = ±1 −1 −1 −1 Also ist a ein solider Beweis, dass n eine zusammengesetzte Zahl ist. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 20 / 45 Miller Rabin Primzahltest Solide Beweise Solide Beweise (Forts.) Anwendung: Angenommen, a ist ein solider Beweis, dass n eine zusammengesetzte Zahl ist. Seien r und u so gewählt, dass n − 1 = 2r · u. Fall 1: an−1 ̸≡ 1 (mod n). Also kann n wegen dem Satz von Fermat keine Primzahl sein. Fall 2: an−1 ≡ 1 (mod n). Dann existiert ein i ∈ {1, . . . r}, so dass i i−1 a2 u ≡ 1 (mod n) und a2 u ̸≡ ±1 (mod n). Also kann n keine Primzahl sein, da es eine von ±1 verschiedene Quadratwurzel von 1 modulo n gibt. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 21 / 45 Solide Beweise Existenz von soliden Beweisen Definition. Sei n ∈ N beliebig gewählt. Falls eine Primzahl p und ein k ∈ N existiert, so dass n = pk , dann nennt man n eine Primzahlpotenz. Satz 4 Sei n ∈ N eine beliebige zusammengesetzte Zahl, die keine Primzahlpotenz ist. Dann sind mindestens die Hälfte der Elemente in Z∗n solide Beweise dafür, dass n eine zusammengesetzte Zahl ist. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 22 / 45 Miller Rabin Primzahltest Solide Beweise Existenz von soliden Beweisen (Forts.) Beweis. Sei n beliebige zusammengesetzte Zahl, die keine Primzahlpotenz ist. Die Menge B1 ist definiert als B1 = {b ∈ Z∗n | b ist kein solider Beweis für n}. Ziel: Definition einer Menge B2 mit (i) B1 ⊆ B2 (ii) B2 ist eine echte Untergruppe von Z∗n Hieraus folgt der Satz, denn ∥B1 ∥ ≤ ∥B2 ∥ ≤ Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest ∥Z∗n ∥ . 2 Generierung von Primzahlen 23 / 45 Solide Beweise Existenz von soliden Beweisen (Forts.) Wähle nun r ≥ 1 und u so, dass n − 1 = 2r u und u ungerade. Die Zahl j ist definiert als } { es gibt ein a ∈ B1 j = max i ∈ {0, 1, . . . , r − 1} i mit a2 u ≡ −1 (mod n) 0 Da −1 ∈ B1 und u ungerade, ist (−1)2 u ≡ −1 (mod n). Also ist j wohldefiniert. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 24 / 45 Miller Rabin Primzahltest Solide Beweise Existenz von soliden Beweisen (Forts.) Die Menge B2 ist definiert als j B2 = {a ∈ Z∗n | a2 u ≡ ±1 (mod n)}. B1 ⊆ B2 : Wähle ein beliebiges a ∈ B1 . Demnach ist a kein solider Beweis. Also existiert ein i ∈ {0, 1, . . . , r − 1} mit: i a2 u ≡ a2 i+1 u r ≡ . . . ≡ a2 u ≡ 1 (mod n) j Gemäß Definition von j gilt i ≤ j und somit a2 u ≡ 1 (mod n). Also ist a ∈ B2 . Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 25 / 45 Solide Beweise Existenz von soliden Beweisen (Forts.) B2 ist eine Untergruppe von Z∗n : Wähle beliebige a, b ∈ B2 . Es gilt: j j j (a · b)2 u ≡ a2 u · b2 u ≡ (±1) · (±1) ≡ ±1 (mod n) Also ist a · b ∈ B2 . Mit ZTK (Satz 9.9) folgt, dass B2 eine Untergruppe von Z∗n ist. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 26 / 45 Miller Rabin Primzahltest Solide Beweise Existenz von soliden Beweisen (Forts.) B2 ist eine echte Untergruppe von Z∗n : Laut Annahme ist n eine zusammengesetzte Zahl und keine Primzahlpotenz. Somit ist n = n1 · n2 mit gcd(n1 , n2 ) = 1. Anwendung des Chinesischen Restsatzes: Für alle a ∈ B2 gilt entweder j a2 u ⇋CRT ⟨n1 ,n2 ⟩ (−1, −1) oder j a2 u ⇋CRT ⟨n1 ,n2 ⟩ (1, 1) Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 27 / 45 Solide Beweise Existenz von soliden Beweisen (Forts.) j Wähle ein a ∈ B2 mit a2 u ≡ −1 (mod n). Definiere b ⇋CRT ⟨n1 ,n2 ⟩ (a1 , 1), wobei a1 = a mod n1 . Es gilt: j j b2 u ≡ a21 u ≡ −1 j b2 u ≡ 1 (mod n1 ) (mod n1 ) (mod n2 ) j Also: b2 u ⇋CRT ⟨n1 ,n2 ⟩ (−1, 1). Folglich kann b nicht in B2 enthalten sein. Ergebnis: B2 ist eine echte Untergruppe von Z∗n . Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 28 / 45 Miller Rabin Primzahltest Ganzzahlpotenzen Erkennen von Potenzen Definition. Sei n eine natürliche Zahl. n nennt man eine Ganzzahlpotenz, falls es natürliche Zahlen b > 1 und e > 1 gibt, so dass n = be . Entscheidungsproblem Ganzzahlpotenz: Gegeben: Natürliche Zahl n > 2 Gefragt: Ist n eine Ganzzahlpotenz? Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 29 / 45 Ganzzahlpotenzen Erkennen von Potenzen (Forts.) Ziel: Entwicklung eines Polynomialzeit Algorithmus für das obige Problem. Ansatz: Zwei Schritte 1. Algorithmus, der für gegebene natürliche Zahlen n > 2 und e > 2 überprüft, ob ein b ∈ N existiert, so dass n = be . 2. Algorithmus, der für alle theoretisch möglichen Exponenten unter Einsatz von Algorithmus 1 überprüft, ob es eine passende Basis b für n gibt. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 30 / 45 Miller Rabin Primzahltest Ganzzahlpotenzen Erkennen von Potenzen (Forts.) SearchBase(n, e) Input: Natürliche Zahlen n, e, wobei n ≥ 2 und 2 ≤ e ≤ log2 n + 1 Output: b mit be = n, falls ein solches b existiert, 0 sonst 1 left := 2; right := n; 2 do 3 b := left + (right − left)/2; 4 x := be ; 5 if x > n then 6 right := b; 7 else 8 left = b; 9 while x ̸= n and (right − left)/2 > 0 Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 31 / 45 Ganzzahlpotenzen Erkennen von Potenzen (Forts.) 10 11 12 13 if x = n then return b else return 0 Bemerkungen: • Zur Berechnung der Basis wird Binäre Suche eingesetzt. • Den Wert be berechnet man mittels eines an die modulare Exponentation angelehntes Verfahren. • Die Berechnung von be wird abgebrochen, wenn feststeht, dass be > n ist. • Die Laufzeit von SearchBase(n, e) ist polynomial in der Größe der Binärdarstellung von n. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 32 / 45 Miller Rabin Primzahltest Ganzzahlpotenzen Erkennen von Potenzen (Forts.) Satz. Für alle natürlichen Zahlen n gilt: Falls n eine Ganzzahlpotenz be ist, dann gilt 1 < e ≤ log2 n + 1. Konsequenz: Alle möglichen Werte für e können mittels SearchBase(n, e) überprüft werden Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 33 / 45 Ganzzahlpotenzen Erkennen von Potenzen (Forts.) PerfectPower(n) Input: Natürliche Zahl n > 2 Output: true, falls n eine Ganzzahlpotenz ist, false, sonst 1 found := false; e := 2 2 while e ≤ log2 n + 1 and found = false do 3 b := SearchBase(n, e) 4 if b > 0 then 5 found := true 6 else 7 e := e + 1 8 if found = true then 9 return (b, e) 10 else 11 return n ist keine Ganzzahlpotenz“ ” Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 34 / 45 Miller Rabin Primzahltest Der Algorithmus Algorithmus Witness(a, n) Witness(a, n) Input: a, n ganze Zahlen, wobei n > 2 ungerade und 1 ≤ a ≤ n − 1 Output: true, falls n keine Primzahl 1 Berechne u und r so dass n − 1 = u · 2r 2 d := ModularExponentation(a, u, n); 3 for i := 1 to r do 4 x := d; 5 d := (d · d) mod n 6 if (d = 1) and (x ̸= 1) and (x ̸= n − 1) then 7 return true 8 if (d ̸= 1) then 9 return true 10 return false Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 35 / 45 Der Algorithmus Eigenschaften von Witness(a, n) • Die Funktion Witness(a, n) ist eine abgewandelte Form von modularer Exponentiation. • Der Algorithmus berechnet an−1 mod n und sucht während der Berechnung nach Lösungen für die Gleichung x2 ≡ 1 (mod n), die verschieden zu 1 und n − 1 sind. • Falls Witness(a, n) = true, dann wird a als Beleg (engl. witness) für die Tatsache angesehen, daß n keine Primzahl ist. • Ist n > 2 eine zusammengesetzte Zahl, dann existieren hierfür mindestens (n − 1)/2 Belege in {1, 2, . . . , n − 1}. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 36 / 45 Miller Rabin Primzahltest Der Algorithmus Miller Rabin Primzahltest MillerRabinTest(n, s) Input: Natürliche Zahl n > 2, Qualitätsparameter s ∈ N Output: true, falls n eine Primzahl ist, false, sonst 1 if n mod 2 = 0 then 2 return false 3 for i := 1 to s do 4 a := Random(1, n − 1) 5 if gcd(a, n) > 1 then 6 return false 7 if Witness(a, n) = true then 8 return false 9 if n ist eine Ganzzahlpotenz then 10 return false 11 return true Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 37 / 45 Der Algorithmus Analyse des Miller Rabin Primzahltests Satz. Sei n eine beliebige natürliche Zahl. • Falls n eine Primzahl ist, dann liefert der Miller-Rabin Primzahltest immer true zurück. • Falls n eine zusammengesetzte Zahl ist, dann liefert der Miller-Rabin Primzahltest mit einer Wahrscheinlichkeit von höchstens 2−s true zurück. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 38 / 45 Miller Rabin Primzahltest Der Algorithmus Analyse des Miller Rabin Primzahltests (Forts.) Beweis. Sei n ∈ N beliebig gewählt. Falls n > 2 eine Primzahl ist, dann existieren keine soliden Beweise für die Zusammengesetztheit von n. Ferner ist n nicht gerade und es gilt gcd(a, n) = 1 für alle a ∈ {1, . . . , n − 1}. In diesem Fall liefert der Miller-Rabin Test true zurück. Angenommen, n ist eine zusammengesetzte Zahl. Ist n gerade oder eine Ganzzahlpotenz, dann liefert der Miller-Rabin Test immer false zurück. Ist n ungerade, dann muss ein solider Beweis a für die Zusammengesetztheit von n oder ein a mit gcd(a, n) > 1 gefunden werden, damit der Miller-Rabin Test false zurückliefert. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 39 / 45 Der Algorithmus Analyse des Miller Rabin Primzahltests (Forts.) Analog zur Analyse von PseudoPrime(n, s) (siehe Folie 13) kann man die Wahrscheinlichkeit, dass ein solches a gezogen wird, abschätzen als (∥Z∗n ∥ − ∥B2 ∥) + (n − 1 − ∥Z∗n ∥) 1 ≥ . n−1 2 Folglich ist die Wahrscheinlichkeit, dass kein passendes a gezogen wird, kleiner-gleich 12 . Damit der Miller-Rabin Test einen Fehler liefert, muss in allen s Schleifendurchläufen kein passendes a gezogen werden. Da die Durchläufe unabhängig sind, ist die Wahrscheinlichkeit hierfür ( 1 )s kleiner-gleich 2 . Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 40 / 45 Miller Rabin Primzahltest Bemerkungen Bemerkungen • Der Miller-Rabin Primzahltest ist ein Monte Carlo Algorithmus mit einseitigem Fehler. • Fallunterscheidung: ▷ Stuft der Miller-Rabin Test eine Zahl als zusammengesetzt ein, dann ist das Ergebnis immer korrekt. ▷ Stuft der Miller-Rabin Test eine Zahl als Primzahl ein, dann ist das Ergebnis mit einer Wahrscheinlichkeit von 1 − 2−s korrekt. • Durch die Wahl von s kann die Fehlerwahrscheinlichkeit beeinflusst werden. • Die Laufzeit des Miller-Rabin Tests ist polynomial in log2 n und s. • Voraussetzung für den Einsatz des Miller-Rabin Tests sind kryptographisch gute Zufallszahlen. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Miller Rabin Primzahltest Generierung von Primzahlen 41 / 45 Bemerkungen Primzahlpotenzen sind keine Carmichael Zahlen Satz. Eine Primzahlpotenz ist keine Carmichael Zahl. Beweis. Sei p eine ungerade Primzahl und e > 1 eine ganze Zahl. Betrachte die Zahl n = pe . Da Z∗n eine zyklische Gruppe ist, existiert ein erzeugendes Element g für Z∗n . Es gilt: φ(n) = ∥Z∗n ∥ = (p − 1)pe−1 Angenommen n = pe ist eine Carmichael Zahl. Dann gilt: gn−1 ≡ 1 (mod n) Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 42 / 45 Miller Rabin Primzahltest Bemerkungen Primzahlpotenzen sind keine Carmichael Z. (Forts.) Hieraus folgt, dass n−1≡0 (mod φ(n)) Also ist n − 1 ein Vielfaches von (p − 1)pe−1 , oder als Formel: n − 1 = pe − 1 = k(p − 1)pe−1 Dies ist ein Widerspruch, denn p teilt k(p − 1)pe−1 , aber nicht pe − 1. Anwendung des Satzes im Miller-Rabin Test: • Verzicht auf die Überprüfung, ob n eine Ganzzahlpotenz ist • Vorteil: bessere Laufzeit • Nachteil: Risiko, dass eine Ganzzahlpotenz als Primzahl eingestuft wird Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 43 / 45 Generierung von Primzahlen Generierung von Primzahlen RandomPrime(ℓ, s) Input: Natürliche Zahlen ℓ > 0, s > 0 Output: Natürliche ℓ-bit Zahl n, die mit Wahrscheinlichkeit 1 − 2−s eine Primzahl ist 1 do 2 Generiere eine ℓ-Bit Zufallszahl n 3 while MillerRabinTest(n, s) = false 4 return n Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 44 / 45 Zusammenfassung Zusammenfassung • Primzahlen spielen für kryptographische Anwendungen eine wichtige Rolle • Zieht man zufällig eine Zahl, dann stehen die Chancen gut, dass man eine Primzahl erhält. • Der Miller-Rabin Primzahltest ist ein effizienter Monte Carlo Algorithmus, mit dem man überprüfen kann, ob eine Zahl eine Primzahl ist. • Es gibt auch einen deterministischen Polynomialzeit Algorithmus für das Primzahlproblem. Jedoch ist dieser deutlich langsamer als der Miller-Rabin Test. Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 45 / 45