2ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Literatur
[11-1] Beutelspacher, A.; Schwenk, J.; Wolfenstetter, K.-D.: Moderne Verfahren der Kryptographie. 4. Auflage, Vieweg 2001
[11-2] Schmeh, Klaus: Kryptografie. dpunkt, 6. Auflage, 2017
[11-3] Schneier, Bruce: Angewandte Kryptographie. Addison-Wesleyhttp://www.schneier.com/
[11-4] Freiermuth, Karin; Hromkovic, Juraj; Keller, Lucia; Steffen, Björn: Einführung in die Kryptologie. Vieweg+Teubner, 2010
[11-5] Buchmann, Johannes: Einführung in die Kryptographie. 5. Auflage, Springer, 2010
[11-6] Burnett, Steve; Paine, Stephen: Kryptographie. RSA Security‘s Official Guide. RSA Press, mitp, 2001
[11-7] Diffie-Hellman Key Agreement Methodhttps://tools.ietf.org/pdf/rfc2631.pdf
[11-8] https://de.wikipedia.org/wiki/RSA-Kryptosystem
[11-9] https://de.wikipedia.org/wiki/Eulersche_Phi-Funktion
3ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Übersicht
• Ein bisschen Mathematik
• Diffie-Hellman-Verfahren
• RSA-Verfahren (Schulbuchversion)
4ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Euler'sche Φ-Funktion
a und b sind teilerfremd, wenn sie außer 1 keinen gemeinsamen Teilerhaben, d.h. es gilt ggT(a,b)=1.
Beispiel:21=3*7 und 40=2*2*2*5 sind teilerfremd.
Euler'sche Φ-FunktionΦ(n) ist die Anzahl der positiven ganzen Zahlen, die kleiner als n und zu n teilerfremd sind, also einschließlich 1.
Beispiele:Φ(4)= 2, da alle Elemente aus {1,3} teilerfremd zu 4 sindΦ(6)= 2, da alle Elemente aus {1,5} teilerfremd zu 6 sindΦ(7)= 6, da {1,2,3,4,5,6} teilerfremd zu 7 (Primzahl)
Für alle Primzahlen p gilt: Φ(p)= p-1Für alle Primzahlen p und q gilt: Φ(p*q)= Φ(p)*Φ(q) mit ggT(p,q)=1
5ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Satz von Euler
Wenn zwei positive Ganzzahlen a und m teilerfremd sind, also wennggT(a,m)=1, dann gilt:
aΦ(m) ≡ 1 (mod m), mit a>0 und ggT(a,m)=1
Beispiel:m= 5,Φ(5)= 4 mit a=3
a4 (mod 5) = 34 = 3*3*3*3 ≡ 81 (mod 5) = 1
6ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Kleiner Satz von Fermat – noch einmal
Ein Spezialfall vom Euler'schen Satz ist der kleine Satz von Fermat:
ap-1 ≡ 1 (mod p), mit a>0 und ggT(a,p)=1
Das bedeutet auch, dass p-1 auf den Exponenten beliebig oft addiertoder subtrahiert werden kann, ohne die Kongruenz zu ändern.
Dieser Satz bzw. die dadurch ausgedrückte Eigenschaft wird in der Kryptographie oft benutzt.
Es kann aber auch modulo p-1 auf den Exponenten ohne Auswirkungenauf die Kongruenz angewendet werden (folgt aus der Definition vonModulo):
ar ≡ ar mod p-1 (mod p), mit a>0 und ggT(a,p)=1
7ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Diffie-Hellman-Schlüsselaustausch
• Entwickelt Witfield Diffie und Martin Hellman
• 1976: "New Directions in Cryptography"– Verfahren zum Schlüsselaustausch
– Idee der Public-Key-Verfahren, jedoch kein Algorithmus
– Epoche machende Arbeit
Aus: http://de.wikipedia.org/wiki/Whitfield_Diffie http://de.wikipedia.org/wiki/Martin_Hellman
8ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Bemerkungen
In den 90er Jahren gab es Veröffentlichungen von der NSA,dass die Ideen von Diffie-Hellman sowie auch die späteren Public-Key-Verfahren im Rahmen des Echelon-Netzwerkes (NSA, Britische und Australische "Abhör"-Geheimdienste) schon in den 60er Jahren entwickelt und benutzt wurden.
Diese Verfahren wurden jedoch geheim gehalten....
Clifford Cocks vom GCHQ hat 1973 die Grundlagen dazu entdeckt, was bis 1997 geheim gehalten wurde.Nach: http://www.di-mgt.com.au/rsa_alg.html
Siehe auch: http://de.wikipedia.org/wiki/Echelon
9ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Das Verfahren I
Vorbereitung:A und B einigen sich auf eine Primzahl p und eine natürliche Zahl gmit g<p.p und g sind öffentlich.
1) A wählt zufällig x mit x<p2) A berechnet a ≡ gx mod p3) A schickt a an B (öffentlich)4) A erhält b von B (öffentlich)5) A berechnet K
1 ≡ bx mod p
1) B wählt zufällig y mit y<p2) B berechnet b ≡ gy mod p3) B schickt b an A (öffentlich)4) B erhält a von A (öffentlich)5) B berechnet K
2 ≡ ay mod p
K1 = K
2 (!)
10ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Das Verfahren II - Ein Beispiel
Vorarbeiten: g=3 und p=7
(1) A wählt zufällig x=2 mit x<7(2) B wählt zufällig y=5 mit y<7(3) A berechnet a ≡ gx mod 7 -> a ≡ 32 mod 7 ≡ 2 mod 7(4) A schickt a=2 an B (A's öffentlicher Schlüssel)(5) B berechnet b ≡ gy mod 7 -> b ≡ 35 mod 7 ≡ 5 mod 7(6) B schickt b=5 an A (B's öffentlicher Schlüssel)(7) A berechnet K1 ≡ bx mod 7 -> K1 ≡ 52 mod 7 ≡ 4 mod 7
(8) B berechnet K2 ≡ ay mod 7 -> K2 ≡ 25 mod 7 ≡ 4 mod 7
K1 = K2 = 4
11ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Sicherheit von Diffie-Hellman (DH)
• Bitlängen für g, x und y sind frei wählbar - je größer, desto besser; es gibt aber bei der Wahl der Werte einschränkende Regeln (siehe später).
• Vollständiges Durchprobieren ist nicht effektiv, da es schnellere Algorithmen zur Lösung des diskreten Logarithmus gibt:– 512 bit sind viel zu klein
– 1024 bit sind na ja
– 2048 bit sind in Ordnung
– 3000 bit sind zu empfehlen
• Bisher ist kein Verfahren bekannt, das einen 2048 bit-Schlüssel innerhalb eines Menschenlebens knacken konnte.
• DH ist aber für den Man-in-the-Middle-Angriff empfindlich, d.h. es muss eine Authentisierung zusätzlich durchgeführt werden.
12ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Einschränkungen bei der Wahl von g I
• g wird auch Generator genannt.
• Eine Zahl ist dann ein Generator, wenn ihre Potenzierungen jedes Element der Grundmenge außer der 0 ergeben.
• Für die Grundmenge G kann daher geschrieben werden:
G\{0}=⟨g⟩ ={g,g2,g3,g4,...,gn-1}
• gn-1 ist immer 1 (Kleiner Satz des Fermat), dann kann die Folge geschrieben werden: g,g2,g3,g4,...,gn-1,g,g2,g3,g4,...,gn-1,... Daher auch der Name Zyklische Gruppe.
• Das g beim Diffie-Hellman-Verfahren sollte ein Generator sein.Warum?
• Siehe– https://de.wikipedia.org/wiki/Zyklische_Gruppe
– https://de.wikipedia.org/wiki/Erzeugendensystem
– https://de.wikipedia.org/wiki/Primitivwurzel
13ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Beispiele für Generatoren
g Sequenz der Potenzen bei p= 41
1 1
2 2 4 8 16 32 23 5 10 20 40 39 37 33 25 9 18 36 31 21 1
3 3 9 27 40 38 32 14 1 3 9 27 40 38 32 14 1
4 4 16 23 10 40 37 25 18 31 1
5 5 25 2 10 9 4 20 18 8 40 36 16 39 31 32 37 21 23 33 1
6 6 36 11 25 27 39 29 10 19 32 28 4 24 21 3 18 26 33 34 40 35 5 30 16 14 2 12 31 22 9 13 37 17 20 38 23 15 8 7 1
7 7 8 15 23 38 20 17 37 13 9 22 31 12 2 14 16 30 5 35 40 34 33 26 18 3 21 24 4 28 32 19 10 29 39 27 25 11 36 6 1
40 40 1
• In der Tabelle bilden nur die Werte 6 und 7 Generatoren.
• Eine 1, 4 oder 40 für g zu wählen, ist keine gute Idee.
• Der Zyklus bei einem Generator endet immer mit einer 1:gp-1 mod p = 1
14ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Einschränkungen bei der Wahl von g II
• Wenn g kein Generatorelement ist, dann kann durch gx bzw. gy nur eine Teilmenge der Grundmenge beim Potenzieren "benutzt" werden, was dem Angreifer sein Werk erleichtert.
• Extremes Beispiel:
g=1, dann berechnen Alice und Bob a=1 und b=1 unabhängig von ihren gewählten x- und y-Werten.
Das erneute Potenzieren der ausgetauschten Werte führt zu K1=K2=1 als einzig möglichen Wert.
• Starke Primzahl = Eine Primzahl p ist dann stark, wenn die Zahl q= (p-1)/2 auch eine Primzahl ist.
• Satz: Für eine starke Primzahl p ist g ein Generator, wenn g2 mod p<>1 und gq mod p<>1 mit q= (p-1)/2 gelten.
• Damit kann leicht eine Prüfroutine realisiert werden.
Wie lässt sich prüfen, ob eine Zahl ein Generator ist?
15ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Einschränkungen bei der Wahl von g III
g g2 mod p<>1 gq mod p<>1
5 True True
7 True True
10 True True
11 True True
14 True True
15 True True
17 True True
19 True True
20 True True
21 True True
22 False True
p=23 q=11
g=22 ist keinGenerator
Wenn der Kandidat aus der Menge{2,..,p-2} ausgewählt wird, kanndas Prüfen von g2 mod p<>1 weg-gelassen werden, da dies nur beip-1 relevant wird, siehe Beispiel.
16ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Einschränkungen bei der Wahl von x bzw. y
• Alice und Bob können nicht alle Werte von 0 bis p-1 wählen, denn für x = 0 bzw. 1 kommt kein Geheimnis heraus, was leicht einzusehen ist.
• Etwas komplexer ist der Grund dafür, dass auch p-1 für x und y nicht erlaubt sind.
• Also muss für x 1<x<p-1 gelten.
17ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
BSI-Empfehlungen - Diffie-Hellman
• p sollte mindestens 3000 bit lang sein.
• Die zufälligen Werte x und y sollten mind. 250 bit lang sein.
• Die Wahl von g sollte immer ein Generator sein bzw. der Zyklus mindestens 2250 lang sein, d.h. nach 2250 Potenzierungen wiederholen sich die generierten Elemente.
• Für die Primzahl p sollte auch gelten, dass die Zahl (p-1)/2 auch eine Primzahl ist, d.h. p sollte eine starke Primzahl sein.
18ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
RSA-Verfahren
• Entwickelt 1977 aufgrund der Veröffentlichung von Diffie-Hellman
• Erfinder: R. Rivest, A. Shamir, L. Adleman (RSA)
• Verfahren ist im PKCS#1 beschrieben.Siehe: http://de.wikipedia.org/wiki/RSA-Kryptosystem
• Das RSA-Verfahren war bis zum Jahr 2000 patentiert.
Die drei vor längererZeit am MITLinks: Shamir,Mitte: RivestRechts: Adleman
http://www.ams.org/featurecolumn/images/april2006/internet12.jpg
19ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
RSA-Algorithmus I
• p und q sind ungleiche ungerade positive Primzahlen
• n= p*q, dieses n wird RSA-Modul genannt
• e und d werden aus ℕ so gewählt, dass e*d ≡ 1 (mod Φ(n)) ist.
• P aus ℕ ist der Klartext, C aus ℕ ist der Chiffretext:
• Verschlüsseln (1. Anwendung): C = Pe MOD n
• Entschlüsseln (2. Anwendung): P = Cd MOD n
Öffentlicher Schlüssel ist Kp={e,n}
Geheimer Schlüssel ist Ks={d,n}
Schlüsselpaar ist {{e,n},{d,n}}
20ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
RSA-Algorithmus II - Korrektheit
1) Es wurden d und e gewählt, wobei gilt: d*e ≡ 1 (mod Φ(n))also gilt auch: d*e ≡ k*Φ(n)+1und mit P als Plaintext
2) C ≡ Pe (mod n) // 1. Anwendung mit e
3) P' ≡ Cd (mod n) // 2. Anwendung mit d
4) P' ≡ Pe*d (mod n) // C wird ersetzt durch P (Zeile 2)
5) P' ≡ P(k*Φ(n)+1) (mod n) // wegen Zeile 1
6) P' ≡ Pk*Φ(n)*P (mod n) // +1 aus dem Index zum Faktor P
7) P' ≡ (PΦ(n))k*P (mod n) // Produkt der Potenz
8) P' ≡ (1)k*P (mod n) // Euler: aΦ(n)≡ 1 (mod n)
9) P' ≡ P (mod n) // q.e.d.. da P'=P
21ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Bedingungen an P
• Der Plaintext P darf nicht 0 oder 1 oder n-1 sein, da dann keine Verschlüsselungen vorliegen. Warum?
• Der Plaintext P darf nicht größer als n sein, weil dann der Text nach der Entschlüsselung nicht eindeutig ist. Warum?Verschiedene Werte für den Chiffre Text ergeben denselben Plaintext aufgrund der Modulo-Operation.
• Welche Formate bzw. Verfahren angewendet werden regelt folgendes Dokument: PKCS#1 und RFC 8017 https://tools.ietf.org/pdf/rfc8017.pdf
• Siehe dazu auch https://de.wikipedia.org/wiki/Public-Key_Cryptography_Standards
22ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Schlüsselerzeugung (vereinfacht)
1)Wähle zwei zufällige ungleiche Primzahlen p, q
2)Berechne n=p*q und Φ(n)= Φ(p)*Φ(q)= (p-1)*(q-1)
3)Wähle ein e und berechne ggT(e,Φ(n)),falls dies ungleich 1 ist, dann wähle ein neues e (oder neues n)
4)Berechne d mit (d*e) mod Φ(n)=1 bzw. d*e ≡ 1 (mod Φ(n))
5)Öffentlicher Schlüssel ist {e,n}
6)Geheimer Schlüssel ist {d,n}
e darf nicht zu klein gewählt werden,üblich ist der Bereich zwischen 216+1= 65537 und 21824-1.
Die Sicherheit beruht auf der aufwendigen Bestimmungvon p und q anhand von n.
23ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Schlüsselerzeugung (Algorithmus) I
func BigInt generatePrime(int keySize>60,base, delta) { range:= [2**(base-delta),2**(base+delta)]; p:= random(range) with bit0=1 highest2Bits=11; while not isPrime(p){ p:= p+2; } return p;}
• isPrime(p) testet die übergebene Zahl, ob sie eine Primzahl ist. • random() liefert eine Zufallszahl innerhalb des angegebenen
Bereichs.• Der Wert von delta definiert wie "eng" die gelieferten Primzahlen
nebeneinander liegen. Das BSI empfiehlt:0.1< abs(log2p-log2q) <30
• base definiert, um welchen Wert herum die Zufallszahlen liegen.
24ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Schlüsselerzeugung (Algorithmus) II
func BigInt[] generateKeys(nat keySize>530) { delta:= 30; base:= random([500+delta,keySize-delta]); elist:= list[2**16+1,realPrime()]; success:= false; while not success { p:= generatePrime(keySize,base,delta); do { q:= generatePrime(keySize,base,delta); } until p<>q; phiN:= (p-1)*(q-1); foreach e in eList { if ggT(e,phiN)=1 { success:= true; break; } } } d:= invers(e,phiN); return [p,q,n,e,d]; }
Liste von echtenPrimzahlen >2**16+1
Berechnung desmultiplikativenInversen mit eggT()
25ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Bemerkungen I
• Die beiden Grenzwerte zur zufälligen Berechnung von von base sind kritisch; hier ist der untere Wert 500.
• Bei der Faktorisierung liegt zur Zeit der beste Wert bei ca. 800 bit (für n=p*q), also sollte base zwischen [500+delta,…] liegen, so dass n minimal 880 bit lang ist.
• Dieser Wert 500 ist die absolut unterste Grenze, besser sind 1000 oder 1500.
• Für die Wahl von p und q gibt es noch weitere einschränkende Bedingungen, siehe: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf Anhang B.3.4
Diese Einschränkungen beruhen auf bekannten Algorithmen der Gegenseite und erhöhen für diese Algorithmen den Aufwand.
• Aber: das verletzt die Gleichverteilung, besser ist wohl die Schlüssellänge zu vergrößern.
26ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Bemerkungen II - Optimierungen
• Optimierung:
• Falls e eine echte Primzahl ist:
ggT(e,p-1)>1 --> p-1= k*e --> p-1 MOD e = 0 --> p MOD e = 1
foreach e in eList { if ggT(e,phiN)=1 { success:= true; break; }}
foreach e in eList { if ggT(e,p-1)=1 and ggT(e,q-1) { success:= true; break; }}
foreach e in eList { if p mod e<>1 and q mod e<>1 { success:= true; break; }}
Das ist der Grund, warumfür e Primzahlen benutztwerden sollten.
27ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Ein Beispiel
→Wahl: p= 5, q= 17 n= p*q= 85 und e= 3
Φ(n)= Φ(85)= (p-1)*(q-1)= 4*16= 64
d*e ≡ 1 mod 64 mit d= 43da 43*3 ≡ 1 mod Φ(85)
e = 3 und d = 43, d.h. Öffentlicher Schlüssel ist { 3,85} Geheimer Schlüssel ist {43,85}
Beispiel Verschlüsselungm= 2 (Nachricht)C ≡ me mod n, also C≡ 23
→ mod 85 C= 8
Entschlüsselungm' ≡ Cd mod n, also m'≡ 843
→ mod 85 p'= 2
28ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Sicherheit von RSA
• Schlüssellängen– Unter 512 bit nicht zu empfehlen
– 1024 bit nur für Hausgebrauch
– 2048 bit in Ordnung, besser länger
– 3000 bit empfiehlt das BSI
• Erfolgreiche Faktorisierungsattacken
Siehe:http://www.emc.com/emc-plus/rsa-labs/historical/the-rsa-challenge-numbers.htm
155 bit 1999
576 bit 2003
640 bit 2005
768 bit 2009
29ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
BSI-Empfehlungen - RSA
• p und q sollten ähnlich groß, aber nicht gleich sein:0.1< abs(log2p-log2q) <30
• Die Wahrscheinlichkeit, dass p oder q doch keine Primzahlen sind, sollte kleiner als 2-100 sein.
• Die Schlüssellänge von n sollte mindestens 3000 bit lang sein.
• Für e darf kein kleiner Wert, wie z.B. 3, benutzt werden;Werte ab 216+1 bis 21824 sind in Ordnung.
• Falls d gewählt wird, so muss die Bitlänge von d größer als ¼ der Bitlänge von n sein.
• Die Optimierung nach dem Chinesischen Restzahlensatz sollte unterlassen werden, da p und q sicher gespeichert werden müssen.
• Die Nachricht m muss kleiner als n sein.
• Das obige Verfahren ist die Lehrbuch-Variante, die nicht so in der Praxis benutzt werden sollte.
30ITSec – SS 2019 – Teil 11/Asymmetrische Verschlüsselung
Weitere asymmetrische Verfahren
• Digital Signature Algorithm (DSA)
• Elliptic Curve Cryptography (ECC)
• Cailey-Purser
• ElGamal
• Es gibt ca. 13.000 Variationen bei den Verfahren der Gruppe, die auf den diskreten Logarithmen beruhen.