Kryptographische Protokolle
Lerneinheit 2: Generierung von Primzahlen
Prof. Dr. Christoph Karg
Studiengang Informatik Hochschule Aalen
Sommersemester 2021
12.4.2021
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 ist?
• Wie kann man überprüfen, ob eine Zahl eine Primzahl ist?
• Gibt es effiziente Algorithmen für Primzahltests?
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, dass 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 / 47
Wissenswertes über Primzahlen
Wissenswertes über Primzahlen (Forts.)
n 100 1000 10000 100000 1000000
π(n) 25 168 1229 9592 78498
n/ln(n) 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 muss man 89 ungerade Zahlen unter Gleichverteilung ziehen, um eine Primzahl aus obiger Menge zu
finden.
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 Generierung von Primzahlen 5 / 47
Ein einfacher Primzahltest 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
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 Generierung von Primzahlen 7 / 47
Ein einfacher Primzahltest 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.
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 Generierung von Primzahlen 9 / 47
Ein einfacher Primzahltest 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∥ ≤ ∥Z2∗n∥.
Also gibt es mindestens ∥Z2∗n∥ Beweise, dass n eine zusammengesetzte Zahl ist.
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 Generierung von Primzahlen 11 / 47
Ein einfacher Primzahltest 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∥
| {z }
Fall 1
+ (n−1) − ∥Z∗n∥
| {z }
Fall 2
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 ≥
∥Z∗n∥
2 + (n −1−∥Z∗n∥) n−1
= n− 1− ∥Z2∗n∥ n−1
= 1− ∥Z∗n∥ 2(n−1)
≥ 1− ∥Z∗n∥ 2∥Z∗n∥
= 1 2
Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 13 / 47
Ein einfacher Primzahltest 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, ist die Wahrscheinlichkeit hierfür höchstens 12s
.
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 log2n 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 / 47
Carmichael Zahlen
Carmichael Zahlen
Definition. Eine zusammengesetzte Zahl n 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.
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 Generierung von Primzahlen 17 / 47
Miller Rabin Primzahltest 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.
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) und
2. für alle i = 1, . . . ,r− 1 gilt: a2iu ̸≡ −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 Generierung von Primzahlen 19 / 47
Miller Rabin Primzahltest 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 = 66201320698275764447 ̸= ±1 a21u mod n = 96583122364964211505 ̸= −1
a22u mod n = 16384 ̸= −1
a23u mod n = 268435456 ̸= −1
Also ist a ein solider Beweis, dass n eine zusammengesetzte Zahl ist.
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 a2iu ≡ 1 (mod n) und a2i−1u ̸≡ ±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 Generierung von Primzahlen 21 / 47
Miller Rabin Primzahltest 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.
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
1. B1 ⊆ B2
2. B2 ist eine echte Untergruppe von Z∗n
Hieraus folgt der Satz, denn ∥B1∥ ≤ ∥B2∥ ≤ ∥Z2∗n∥.
Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 23 / 47
Miller Rabin Primzahltest Solide Beweise
Existenz von soliden Beweisen (Forts.)
Wähle nun r ≥ 1 und u so, dass n−1 = 2ru und u ungerade.
Die Zahl j ist definiert als j = max
i ∈ {0,1, . . . ,r−1}
es gibt ein a ∈ B1
mit a2iu ≡ −1 (mod n)
Da −1 ∈ B1 und u ungerade, ist (−1)20u ≡ −1 (mod n). Also ist j wohldefiniert.
Miller Rabin Primzahltest Solide Beweise
Existenz von soliden Beweisen (Forts.)
Die Menge B2 ist definiert als
B2 = {a ∈ Z∗n|a2ju ≡ ±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:
a2iu ≡ a2i+1u ≡ . . . ≡ a2ru ≡ 1 (mod n)
Gemäß Definition von j gilt i ≤ j und somit a2ju ≡ 1 (mod n). Also ist a ∈ B2.
Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 25 / 47
Miller Rabin Primzahltest Solide Beweise
Existenz von soliden Beweisen (Forts.)
B2 ist eine Untergruppe von Z∗n: Wähle beliebige a,b ∈ B2. Es gilt:
(a ·b)2ju ≡ a2ju ·b2ju ≡ (±1)·(±1) ≡ ±1 (mod n) Also ist a·b ∈ B2.
Mit ZTK (Satz 9.9) folgt, dass B2 eine Untergruppe von Z∗n ist.
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
a2ju ⇋CRT⟨n1,n2⟩ (−1,−1) oder
a2ju ⇋CRT⟨n1,n2⟩ (1,1)
Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 27 / 47
Miller Rabin Primzahltest Solide Beweise
Existenz von soliden Beweisen (Forts.)
Wähle ein a ∈ B2 mit a2ju ≡ −1 (mod n).
Definiere b ⇋CRT⟨n1,n2⟩ (a1,1), wobei a1 = a mod n1. Es gilt:
b2ju ≡ a21ju (mod n1)
≡ −1 (mod n1) b2ju ≡ 1 (mod n2)
Also: b2ju ⇋CRT⟨n1,n2⟩ (−1,1). Folglich kann b nicht in B2 enthalten sein.
Ergebnis: B2 ist eine echte Untergruppe von Z∗n.
Miller Rabin Primzahltest Ganzzahlpotenzen
Erkennen von Ganzzahlpotenzen
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 Generierung von Primzahlen 29 / 47
Miller Rabin Primzahltest Ganzzahlpotenzen
Ansatz zum Erkennen von Ganzzahlpotenzen
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 k > 2 überprüft, ob ein x ∈ N existiert, so dass n = xk. 2. Algorithmus, der für alle theoretisch möglichen Exponenten
unter Einsatz von Algorithmus 1 überprüft, ob es eine passende Basis x für n gibt.
Miller Rabin Primzahltest Ganzzahlpotenzen
Berechnen der ganzzahligen Quadratwurzel
SearchSqrt
(n)Input: Natürliche Zahl n mit n ≥ 2
Output: x mit x2 = n, falls ein solches x existiert, 0 sonst.
1 ℓ ← BitCount(n) +1
2 y ← 2ℓ
3 do
4 x ← y
5 y ← ⌊(x+ ⌊n/x⌋)/2⌋
6 while y < x
7 if x2 = n then
8 return x
9 else
10 return 0
Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 31 / 47
Miller Rabin Primzahltest Ganzzahlpotenzen
Bemerkungen
• Der Algorithmus berechnet die größte Zahl x mit x2 ≥ n.
• Das Verfahren bezeichnet man als Newton-Iteration.
• Die Anzahl der Schleifendurchläufe ist O(ln lnn).
• Der Algorithmus berechnet die k-te Wurzel von n (falls existent), wenn man folgende Änderungen durchführt:
▷ Zeile 1: ℓ ← ⌊BitCount(n)/k⌋+1
▷ Zeile 5: y ←
((k−1)·x+
n/xk−1 )/k
Die Variable k ist ein zusätzlicher Eingabeparameter.
• Der modifizierte Algorithmus wird im folgenden SearchRoot(n,k) genannt.
Miller Rabin Primzahltest Ganzzahlpotenzen
Ein wichtiger Satz
Satz. Für alle natürlichen Zahlen n gilt: Falls n eine Ganzzahlpotenz bk ist, dann gilt 1 < k ≤ log2n+1.
Konsequenz: Alle möglichen Werte für k können mit dem Algorithmus SearchRoot(n,k) überprüft werden.
Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 33 / 47
Miller Rabin Primzahltest Ganzzahlpotenzen
Erkennen von Potenzen (Forts.)
SearchIntegerPower
(n) Input: Natürliche Zahl n > 2Output: (x,k) mit xk = n, falls n eine Ganzzahlpotenz ist, false, sonst
1 found ←false; k ← 2
2 while k ≤ BitCount(n) and found= false do
3 x ← SearchRoot(n,k)
4 if x > 0 then
5 found ←true
6 else
7 k ← k+ 1
8 if found = true then
9 return (x,k)
10 else
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 Generierung von Primzahlen 35 / 47
Miller Rabin Primzahltest 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, dass n keine Primzahl ist.
• Ist n > 2 eine zusammengesetzte Zahl, dann existieren hierfür mindestens (n−1)/2 solide Beweise in {1,2, . . . ,n−1}.
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 if n ist eine Ganzzahlpotenz then
4 return false
Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 37 / 47
Miller Rabin Primzahltest Der Algorithmus
Miller Rabin Primzahltest (Forts.)
5 for i ← 1 to s do
6 a ← Random(1,n −1)
7 if gcd(a,n) > 1 then
8 return false
9 if Witness(a,n) = true then
10 return false
11 return true
Miller Rabin Primzahltest 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 39 / 47
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.
Miller Rabin Primzahltest 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∥)
n− 1 ≥ 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 kleiner-gleich 12s
.
Prof. Dr. C. Karg (HS Aalen) Kryptographische Protokolle Generierung von Primzahlen 41 / 47
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.
Miller Rabin Primzahltest 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 43 / 47
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.
Miller Rabin Primzahltest Bemerkungen
Anwendung des Satzes
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 45 / 47
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
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 47 / 47