Vorlesungsbegleitende Folien zur LV Kryptologie, WS

Werbung
Prof. Dr. Karl–Udo Jahn, HTWK Leipzig
Vorlesungsbegleitende Folien zur LV Kryptologie, WS 2009/2010
Inhaltsverzeichnis
Einleitung mit Beispielen, Literaturempfehlungen
1. Grundbegriffe
1.1 Kryptographie – Kryptoanalyse
1.2 Kryptosysteme
1.3 Beispiel (Verschiebechiffre)
1.4 generelle Methoden der Kryptoanalyse
1.5 kryptographische Protokolle
1.6 Angriffe auf kryptographische Protokolle
2. klassische symmetrische Kryptosysteme
2.1 monoalphabetische und polyalphabetische Chiffrierungen
2.1.1
2.1.2
2.1.3
2.1.4
Substitutionschiffren
affine Chiffren (Tauschchiffren)
polyalphabetisches Chiffrieren anhand einer mengenwertigen Abbildung
Vigenére–Chiffre
Kasiski– und Friedman–Test, langes Schlüsselwort
2.1.5 Hill–Chiffre
2.2 das one–time Pad; perfekte Sicherheit
2.2.1 one–time–pad
2.2.2 perfekte Sicherheit; Entropie
2.3 Block– und Stromchiffrierungen
2.3.1 Stromchiffrierung
2.3.2 Erzeugung eines Schlüsselstromes für Stromchiffrierungen
2.3.2.1 lineare Rekursion
2.3.2.2 lineares rückgekoppeltes Schieberegister (LFSR)
2.3.2.3 weitere Anwendungen von LFSR’s
2.3.2.4 RSA–Generator
2.3.2.5 diskreter Logarithmus–Generator
2.3.2.6 RC4
2.3.3 Blockchiffrierungen
2.3.3.1 ECB–Modus; Padding
2.3.3.2 CBC–Modus; MAC und HMAC; Geburtstagsparadoxon
2.3.3.3 CFB–Modus
2.3.3.4 OFB–Modus
2.3.3.5 CTR–Modus
3. DES, IDEA und AES
3.1 DES
1
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
3.1.6
Vorgeschichte
Grobstruktur von DES
eine Runde der DES–Verschlüsselung; Feistel–Chiffre
Wirkungsweise der Funktion f
Berechnung der Rundenschlüssel
Bemerkungen zu DES
3.2 IDEA
3.2.1 Allgemeines
3.2.2 Struktur
3.2.3 Entschlüsselung
3.3 AES
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
Vorgeschichte
Grobstruktur
Schlüsselexpansion
ByteSub–Transformation
ShiftRow–Transformation
MixColumn–Transformation
3.4 weitere oft verwendete symmetrische kryptographische Algorithmen
4. asymmetrische Kryptosysteme
4.1 Grundlegendes
4.2 der RSA–Algorithmus
4.2.1 Schlüsselerzeugung
4.2.2 RSA–Kryptosystem
4.2.3 praktischer Einsatz
4.3 Faktorisierung ganzer Zahlen
4.3.1 effiziente Faktorisierung einer Potenz
4.3.2 versuchsweise Division
4.3.3 Pollard’s rho–Faktorisierungs–Algorithmus
4.4 das ElGamal–Verfahren
4.4.1
4.4.2
4.4.3
4.4.4
Erzeugung eines primitiven Elementes α ∈ Z∗p
Algorithmus
Bemerkungen
kleines Beispiel
4.5 elliptische Kurven
4.5.1
4.5.2
4.5.3
4.5.4
das elliptische–Kurve diskrete–Logarithmus–Problem (ECDLP)
additive Gruppe der Punkte auf der elliptischen Kurve
ECDLP über Fp
das ElGamal–Verfahren über elliptischen Kurven
4.6 Diffie–Hellman–Schlüsselaustausch
4.7 modulare Quadratwurzeln und das Rabin–Verfahren
4.7.1 quadratische Reste und modulare Quadratwurzeln
4.7.2 Legendre– und Jacobi–Symbol
2
4.7.3 Rabin–Verfahren für spezielle Primzahlen p, q
4.7.4 Bemerkungen
4.7.5 kleines Beispiel
5. digitale Signaturen
5.1 Grundsätzliches
5.2 Signaturschemata
5.3 Beispiele für Signaturschemata
5.3.1
5.3.2
5.3.3
5.3.4
5.3.5
RSA–Signatur–Schema
Signatur–Schema nach ElGamal
Digital Signature Standard (DSS); Digital Signature Algorithm (DSA)
blinde Signaturen
Beispiel: Signieren elektronischer Rechnungen; Signaturserver
6. kryptographische Hash–Funktionen
6.1 Forderungen an kryptographische Hash–Funktionen
6.2 Merkle’s Methode zur Konstruktion von Hash–Funktionen
6.3 RIPEMD–160
7. Schlüsselmanagement in public–key– und in secret–key–Systemen
7.1 Schlüsselmanagement durch eine öffentliche Datei
7.2 Zertifizierung der öffentlichen Schlüssel durch eine trusted third party (TTP);
Zertifikate, PKI
7.3 Schlüsselmanagement in symmetrischen Verfahren; Kerberos
7.4 shared secret keys
8. Authentifizierung und Identifizierung von Personen
8.1 Paßwortmechanismen
8.2 Fiat–Shamir–Protokoll
8.2.1
8.2.2
8.2.3
8.2.4
8.2.5
Allgemeines, zero–knowledge–Verfahren
das Protokoll
Anwendungen
Modifikation
Beispiel
8.3 Authentifizierung nach Schnorr
8.3.1
8.3.2
8.3.3
8.3.4
8.3.5
Aufgaben einer TTP bzw. TA
Authentifizierungsprotokoll
Bemerkungen
Beispiel
Ist die Authentifizierung sicher?
(Änderungen und Ergänzungen vorbehalten)
3
Literatur:
Beutelspacher, A. : Kryptologie. Vieweg 2005
Beutelspacher, A., Neumann, H. B. und Th. Schwarzpaul : Kryptographie in Theorie
und Praxis. Vieweg 2005
Beutelspacher, A., Schwenk, J. und K.-D. Wolfenstetter : Moderne Verfahren der
Kryptographie. Vieweg 2006
Buchmann, J. A. : Einführung in die Kryptographie. Springer 2003
Datensicherheit , Grundlagen unter Windows. RRZN, Universität Hannover 2006
Delfs, H. and H. Knebl : Introduction to Cryptography. Springer 2007
Eckert, C. : IT–Sicherheit. Oldenbourg–Verlag 2008
Ertel, W. : Angewandte Kryptographie. Fachbuchverlag Leipzig 2007
Ferguson, N. and B. Schneier : Practical Cryptography. Wiley 2003
Forster, O. : Algorithmische Zahlentheorie. Vieweg 1996
Hankerson, D., Menezes, A. and S. Vanstone : Guide to Elliptic Curve Cryptography.
Springer 2004
Hook, D. : Beginning Cryptography with Java. Wiley 2005
Knudsen, J. : Java Cryptography. 250 pp., OREILLY 1998
Menezes, A. J., van Oorschot, P. C. and S. A. Vanstone : Handbook of applied cryptography. CRC Press 2001
Packschies, L. : Praktische Kryptographie unter Linux. open source Press 2004
Schäfer, G. : Netzsicherheit. Algorithmische Grundlagen und Protokolle. dpunkt-Verlag 2003
Schmeh, K. : Kryptografie. Verfahren, Protokolle, Infrastrukturen. dpunkt.verlag 2007
Schneier, B. : Angewandte Kryptographie. Pearson Studium 2006
Schneier, B. : Secrets and Lies. IT-Sicherheit in einer vernetzten Welt. dpunkt-Verlag 2004
Schroeder, M. R. : Number Theory in Science and Communication. Springer 2005
Schwenk, J. : Sicherheit und Kryptographie im Internet. Von sicherer e-mail bis zur IPVerschlüsselung. Vieweg-Verlag 2002
Stinson, D. R. : Cryptography: Theory and Practice. CRC Press 2006
van Tilborg, C. A. : Encyclopedia of Cryptography and Security. Springer 2005
Weiss, J. : Java Cryptography Extensions. Elsevier Inc. 2004
(siehe auch Inhalt des Verzeichnisses N:\Krypto im PC–Pool)
4
Zahlentheoretisches Grundwissen zur Kryptologie
Teilbarkeit, größter gemeinsamer Teiler, Primzahlen, Kongruenz modulo m
1. Bezeichnungen:
N := {0, 1, 2, · · ·} Menge der natürlichen Zahlen
Z := {· · · , −2, −1, 0, 1, 2, · · ·} Menge der ganzen Zahlen
2. a ∈ Z heißt ein T eiler von b ∈ Z (symbolisch: a | b) genau dann, wenn es
ein c ∈ Z gibt mit a ∗ c = b
formal:
a | b :←→ ∃c(c ∈ Z ∧ a ∗ c = b)
3. d ∈ N heißt der größte gemeinsame Teiler von a, b ∈ Z
(d = ggt(a, b) bzw. d = gcd(a, b)) genau dann, wenn gilt:
d | a ∧ d | b ∧ ∀t(t ∈ Z ∧ t | a ∧ t | b −→ t | d)
(bis auf den Fall gcd(0, 0) = 0 kann man äquivalent dazu auch definieren:
gcd(a, b) ist die größte positive ganze Zahl, die sowohl a als auch b teilt)
es gilt beispielsweise: gcd(a, a) =| a |, gcd(a, b) = gcd(b, a), gcd(a, b) =
gcd(a − b, b)
gcd(a, b) kann mit Hilfe des Euklidischen Algorithmus’ berechnet werden.
Weiterhin gilt: Ist g = gcd(a, b), so gibt es ganze Zahlen s, t mit g =
s ∗ a + t ∗ b.
s und t können mit Hilfe des erweiterten Euklidischen Algorithmus’
berechnet werden.
4. a, b ∈ Z heißen genau dann zueinander teilerfremd bzw. zueinander
relativ prim, wenn gcd(a, b) = 1 ist
5. Primzahlbegriff
eine Zahl p heißt genau dann eine Primzahl, wenn p ∈ N und p ≥ 2 ist
und wenn p nur 1 und p als Teiler hat
Um festzustellen, ob n ≥ 2 eine Primzahl ist oder nicht, brauchen nur alle
√
Primzahlen p mit 2 ≤ p ≤ n daraufhin untersucht zu werden, ob sie
Teiler von n sind oder nicht.
5
6. Satz von der eindeutigen Primfaktorzerlegung
Jede natürliche Zahl n ≥ 2 lässt sich bis auf die Reihenfolge der Faktoren
auf genau eine Weise als Produkt von Primzahlpotenzen mit positiven
Exponenten notieren:
n = pe11 ∗ pe22 ∗ · · · ∗ pekk
wobei p1, p2, · · · , pk paarweise verschiedene Primzahlen sind
7. Anzahl der Primzahlen
Es gibt unendlich viele Primzahlen.
Möge π(x) die Anzahl der Primzahlen, die kleiner oder gleich x sind, bezeichnen. Dann gilt:
ˆ limx→∞
π(x)
x/ln(x)
=1
ˆ x ≥ 17 → π(x) >
x
ln(x)
ˆ x > 1 → π(x) < 1.25506 ∗
x
ln(x)
Die Chance, dass eine aus dem Intervall [2,n] zufällig ausgewählte natürliche Zahl eine Primzahl ist, beträgt also ca. 1/ ln(n).
Beispiele: π(101) = 4, π(102) = 25, π(103) = 168, π(106) =
78 498, π(109) = 50 847 534, π(1012) = 37 607 912 018, π(1015) =
29 844 570 422 669, π(1018) = 24 739 954 287 740 860
Anzahl der Primzahlen mit einer Länge bis zu 512 Bit: ≈ 10151
Wenn ein Festplattenlaufwerk mit 1 Gramm Masse eine Kapazität von 1
GByte hätte, so wäre zum Abspeichern aller Primzahlen mit 512 Bit ein
Laufwerk nötig, das soviel Masse hätte, dass es zu einem schwarzen Loch
kollabieren würde. (B. Schneier)
8. Satz von der Division mit Rest:
Zu zwei beliebigen ganzen Zahlen a, b mit b ≥ 1 gibt es genau zwei ganze
Zahlen q und r, so dass gilt:
a=q∗b+r
∧
0≤r<b
Bezeichnung für den Fall a ≥ 0: r = a mod b, q = a div b bzw. q = a ÷ b.
(Die Operationen div und mod werden oft folgendermaßen für beliebige
ganze Zahlen a, b mit b 6= 0 definiert:
ˆ a div b := ⌊|a|/|b|⌋ ∗ sgn(a ∗ b)
(dabei ist sgn : R → {−1, 0, 1} mit sgn(x) := −1 für negative x,
sgn(x) := 0 für x = 0, und sgn(x) := 1 für positive x)
ˆ a mod b := a − b ∗ (a div b)
)
6
9. Es sei m ∈ N, m 6= 0; zwei natürliche Zahlen r und s heißen genau dann
kongruent modulo m (symbolisch: r ≡ s mod m), wenn (r mod m) =
(s mod m) ist, d.h., wenn r und s bei Division durch m den gleichen Rest
haben.
Verallgemeinerung auf ganze Zahlen a, b, m:
a ≡ b mod m :↔ a − b ist durch m teilbar
Für jedes m ∈ Z ist die Kongruenz modulo m eine Äquivalenzrelation in
Z.
Modulare Arithmetik
1. für jedes n ∈ N mit n ≥ 1 sei
Zn := {0, 1, 2, · · · , n − 1}
Addition, Subtraktion, Multiplikation in Zn :
für beliebige a, b ∈ Zn sei
a ⊕ b := (a + b) mod n
a ⊖ b := (a − b) mod n
a ⊗ b := (a × b) mod n
Dann sind (Zn, ⊕) eine kommutative Gruppe und (Zn , ⊕, ⊗) ein kommutativer Ring mit Einselement. Genau dann, wenn n eine Primzahl ist, ist
(Zn , ⊕, ⊗) sogar ein Körper.
(Anstelle von ⊕, ⊖ bzw. ⊗ wird, wenn keine Verwechslungen zu befürchten
sind, auch einfach wieder +, - bzw. × (oder *) geschrieben.)
2. es sei Z∗n := {m ∈ Zn | 1 ≤ m ∧ gcd(m, n) = 1}
Dann ist (Z∗n , ⊗) eine kommutative Gruppe. Die Anzahl der Elemente
von Z∗n wird mit ϕ(n) (manchmal auch φ(n)) bezeichnet (Eulersche ϕ–
Funktion).
Zu jedem a ∈ Z∗n wird das bzgl. der modularen Multiplikation inverse Element b mit a−1 mod n bezeichnet: b = a−1 mod n.
(Es ist also a ∗ b ≡ 1 mod n).
Hinweis: Berechne b = a−1 mod n mit Hilfe des erweiterten Euklidischen
Algorithmus’.
3. Es sei a, b ∈ Zn mit a ≥ 1, gcd(a, n) = 1. Dann existiert zu f : Zn → Zn
mit f (x) := (a ∗ x + b) mod n die Umkehrfunktion f −1, und es ist f −1(x) =
(a−1 ∗ x − a−1 ∗ b) mod n.
7
4. Eigenschaften der Eulerschen ϕ–Funktion:
ˆ Falls n eine Primzahl ist, so ist ϕ(n) = n − 1.
ˆ Falls m und n zwei zueinander relativ prime natürliche Zahlen sind,
so ist ϕ(m ∗ n) = ϕ(n) ∗ ϕ(m).
ˆ Falls n = pe11 ∗ pe22 ∗ · · · ∗ pekk die Primfaktorzerlegung von n ist, so ist
ϕ(n) = n ∗ (1 −
1
1
1
) ∗ (1 − ) ∗ · · · ∗ (1 − )
p1
p2
pk
ˆ Für alle nat. Zahlen n ≥ 5 ist
ϕ(n) >
.
n
6 ∗ ln(ln(n))
5. es sei n ∈ Z, n ≥ 2; dann gilt:
ˆ falls a ∈ Z∗n ist so ist aϕ(n) ≡ 1 mod n (Satz von Euler)
(gilt auch für beliebige a ∈ N mit a ≥ 1 und gcd(a, n) = 1)
ˆ falls n ein Produkt von paarweise verschiedenen Primzahlen und r ≡
s mod ϕ(n) ist, so ist ar ≡ as mod n für alle ganzen Zahlen a
6. speziell gilt für Primzahlen p:
ˆ falls gcd(a, p) = 1 ist, so ist ap−1 ≡ 1 mod p (kleiner Satz von Fer-
mat)
ˆ falls r ≡ s mod (p − 1) ist, so ist ar ≡ as mod p für alle ganzen Zahlen
a; speziell ist ap ≡ a mod p
ˆ stets ist (a + b)p ≡ (ap + bp ) mod p
Falls also gcd(a, n) = 1 und nicht an−1 ≡ 1 mod n ist, so kann n keine
Primzahl sein (a ist ein Zeuge (witness) dafür, dass n keine Primzahl
ist).
8
7. Rechenregeln für die modulare Arithmetik
ˆ (a + b) mod n = ((a mod n) + (b mod n)) mod n
ˆ (a − b) mod n = ((a mod n) − (b mod n)) mod n
ˆ (a ∗ b) mod n = ((a mod n) ∗ (b mod n)) mod n
ˆ (a ∗ (b + c)) mod n = (((a ∗ b) mod n) + ((a ∗ c) mod n)) mod n
Bei einem Modul n der Länge k Bit können also Addition, Subtraktion,
Multiplikation und Potenzierung so implementiert werden, dass kein Zwischenergebnis länger als 2k Bit wird:
Soll beispielsweise der Wert des Termes (a ∗ b + c) mod n bestimmt werden,
so kann man ihn folgendermaßen klammern:
((((a mod n) ∗ (b mod n)) mod n) + (c mod n)) mod n
so dass zunächst jede Konstante modulo n reduziert und unmittelbar nach
jeder arithmetischen Operation eine Reduktion modulo n durchgeführt
wird.
Modulare Potenzierungen werden effizient mit dem Algorithmus squareand-multiply ausgeführt oder es wird der kleine Satz von Fermat benutzt.
Der folgende Algorithmus (square–and–multiply) berechnet effizient
xn mod m für ganze Zahlen x 6= 0 und natürliche Zahlen m > 1, n:
x, n , m
z:=1
while n>0
while n ist gerade
n := n div 2
x := x * x mod m
n := n−1
z := z * x mod m
z
Die Anzahl der durchzuführenden Multiplikationen ist jeweils nach oben
beschränkt durch 2 ∗ ⌊log2 (n)⌋ + 1.
9
8. lineare Kongruenzen
die lineare Kongruenz a ∗ x ≡ b mod n ist genau dann lösbar, wenn
gcd(a, n)|b ist; es gibt dann genau gcd(a, n)–viele Lösungen in Zn
es sei gcd(a, n)|b und d := gcd(a, n); dann können alle Lösungen x von
a ∗ x ≡ b mod n mit x ∈ Zn auf folgende Weise bestimmt werden:
ˆ bestimme die eindeutige Lösung x0 ∈ Zn von
ˆ berechne x1 := x0 + 1 ∗
x0 + (d − 1) ∗
n
d
mod n
n
d
a
d
∗x≡
b
d
mod
n
d
mod n, x2 := x0 + 2 ∗ nd mod n, · · · , xd−1 :=
dann sind x0, x1, · · · , xd−1 alle Lösungen von a ∗ x ≡ b mod n, die in Zn
liegen
9. Chinesischer Restsatz (Chinese Remainder Theorem)
Es seien m1 , · · · , mr positive natürliche Zahlen, die paarweise relativ prim
zueinander sind. Sind dann a1 , · · · , ar beliebige ganze Zahlen, so gibt es
modulo m := m1 ∗ · · · ∗ mr genau eine natürliche Zahl x (0 ≤ x < m), so
dass die folgenden Kongruenzen alle erfüllt sind:
x ≡ a1 mod m1 , · · ·, x ≡ ar mod mr
Berechnung von x:
Sei Mi := m/mi für alle i mit 1 ≤ i ≤ r. Berechne (z. B. mit Hilfe des
erweiterten euklidischen Algorithmus) die modularen Inversen yi von Mi
modulo mi , also yi := Mi−1 mod mi (mi und Mi sind für alle i relativ prim
zueinander). Dann ist x ≡ (a1 ∗ y1 ∗ M1 + · · · + ar ∗ yr ∗ Mr ) mod m.
Ist speziell r = 2 und sind u1 und u2 ganze Zahlen mit 1 = u1 ∗m1 +u2 ∗m2 ,
dann ist x ≡ (a1 ∗ u2 ∗ m2 + a2 ∗ u1 ∗ m1 ) mod m
10. quadratische Reste, modulare Quadratwurzeln
Zur modularen Quadrierung invers ist das Bestimmen der modularen
Quadratwurzel.
Es sei n ∈ N, n > 1. Dann heißt ein a ∈ Z∗n ein quadratischer Rest
modulo n, fall es ein b ∈ Z∗n gibt mit b2 ≡ a mod n. Weiterhin heißt b
dann eine Quadratwurzel von a modulo n.
Beispiel: n := 55; dann hat 34 ∈ Z∗n die modularen Quadratwurzeln 12, 23,
32 und 43.
Wenn n eine Primzahl ist, so hat a ∈ Z∗n entweder keine oder genau zwei
Quadratwurzeln modulo n.
Wenn n das Produkt zweier Primzahlen ist, so hat a ∈ Z∗n entweder keine
oder genau vier Quadratwurzeln modulo n. Das Berechnen der Quadratwurzeln ist dann genau so schwierig wie das Faktorisieren von n.
10
11. primitives bzw. erzeugendes Element
Es sei a ∈ Z∗n , n > 1;
ˆ a heißt ein primitives bzw. erzeugendes Element der Gruppe
(Z∗n , ⊗) oder einfach von Z∗n , falls die Potenzen a0 mod n, a1 mod n,
· · ·, aϕ(n)−1 mod n alle Elemente von Z∗n ergeben.
Falls Z∗n ein primitives Element hat, so ist also (Z∗n , ⊗) eine zyklische
Gruppe.
ˆ Z∗n hat genau dann ein primitives Element, wenn n = 2, n = 4, n = pk
oder n = 2 ∗ pk ist für eine ungerade Primzahl p und k ≥ 1.
ˆ a ∈ Z∗n ist genau dann ein primitives Element, wenn aϕ(n)/p 6≡ 1 mod n
ist für jeden Primteiler p von ϕ(n).
12. diskrete Logarithmen
Zur modularen Potenzierung invers ist die Berechnung des diskreten Logarithmus einer Zahl b zur Basis a, hier nur betrachtet modulo einer Primzahl
p:
es sei p eine Primzahl, a ∈ Z∗p ein primitives Element und b ∈ Z∗p .
Dann heißt die eindeutig bestimmte Zahl x mit 0 ≤ x ≤ p − 2, für die
ax ≡ b mod p ist, der diskrete Logarithmus von b zur Basis a modulo p.
Schreibweise: x = loga b mod p
Beispiel: 6 = log3 15 mod 17;
3x ≡ 7 mod 13 ist nicht (ganzzahlig) lösbar, denn stets ist 3x ∈
{1, 3, 9} mod 13; (es ist 3 kein primitives Element von Z∗13).
Die Komplexität der Berechnung diskreter Logarithmen modulo p ist im
Wesentlichen genauso groß wie die der Faktorisierung einer ganzen Zahl,
die etwa genauso lang ist wie p und das Produkt zweier annähernd gleich
langer Primzahlen ist.
13. Pseudozufallgeneratoren auf der Basis linearer Kongruenzen
Es seien a, b, m natürliche Zahlen mit m > 0. Dann wird durch das
Iterationsverfahren
x0 ∈ N
(x0 < m als Anfangswert vorgegeben)
xi+1 := (a ∗ xi + b) mod m (i = 0, 1, 2, · · ·)
eine Folge von Zufallszahlen mit einer Periodenlänge von maximal m erzeugt. Es gilt beispielsweise: Falls m eine Zweierpotenz, a ≡ 1 mod 4 und
gcd(b, m) = 1 ist, so ist die Periodenlänge gleich m (s. dazu z.B. Schroeder,
M.R.: Number Theory in Science and Communication. Springer–Verlag
2005 bzw. Forster, O.: Algorithmische Zahlentheorie. Vieweg–Verlag 1996).
11
14. Konvertierungen natürlicher Zahlen in Byte–Strings und umgekehrt
In PKCS#1 v.2.1 (Public Key Cryptography Standard version 2.1) werden
dazu die beiden Algorithmen I2OSP (Integer–to–Octet–String primitive)
sowie OS2IP (Octet–String–to–Integer primitive) vorgeschlagen.
I2OSP(x, xLen) mit den Inputs x (nat. Zahl) und xLen (beabsichtigte
Länge des resultierenden Byte– (Octet–)Strings) sowie dem Output X (zugehöriger Byte–String der Länge xLen):
(a) if x ≥ 256xLen then output ”integer too large” and stop
(b) write the integer x in its unique xLen–digit representation in base 256:
x = xxLen−1 ∗ 256xLen−1 + xxLen−2 ∗ 256xLen−2 + · · · + x1 ∗ 256 + x0
mit 0 ≤ xi < 256 (dabei können einige führende Ziffern Null sein)
(c) let the octet Xi have the integer value xxLen−i for 1 ≤ i ≤ xLen; output
the octet string X := X1 · · · XxLen
Für Zwecke der Konvertierung zu und von natürlichen Zahlen wird das
erste Octet als das am meisten signifikante betrachtet.
OS2IP(X) mit dem Input X als Byte–String und dem Output x als natürliche Zahl:
(a) let X1 X2 · · · XxLen be the octets of X from first to last, and let xxLen−i
be the integer value of the octet Xi for 1 ≤ i ≤ xLen
(b) let x := xxLen−1 ∗ 256xLen−1 + xxLen−2 ∗ 256xLen−2 + · · · + x1 ∗ 256 + x0
(c) output x
15. einige physikalische Beispiele großer Zahlen (Schneier, B.: Angewandte
Kryptographie. Pearson Studium 2006, S. 21)
Alter der Erde: 109 (230) Jahre
Anzahl der Atome in der Erde: 1051 (2170)
Anzahl der Atome in der Sonne: 1057 (2190)
Größe des Universums: 1084 (2280) cm3
Außer den meisten im Literaturverzeichnis enthaltenen Büchern kann man z.B.
auch in einigen im Verzeichnis N:\Krypto enthaltenen Arbeiten Ausführungen
zum zahlentheoretischen Grundwissen finden.
12
Tools bzw. Software, die insbesondere in den Übungen
verwendet werden:
Cryptool siehe www.cryptool.de
Aribas siehe www.mathematik.uni-muenchen.de/∼forster
gpg4win (GnuPG for Windows); siehe www.gpg4win.de
JCE Java Cryptography Extension (in jdk1.6.0 <version> enthalten)
Bouncy Castle Cryptography Provider ; siehe www.bouncycastle.org
(Installationsdateien dazu befinden sich in N:\Krypto im PC–Pool.)
13
Public Key Cryptography Standards (PKCS):
”The Public-Key Cryptography Standards are specifications produced by RSA
Laboratories in cooperation with secure systems developers worldwide for the
purpose of accelerating the deployment of public-key cryptography. First published in 1991 as a result of meetings with a small group of early adopters
of public-key technology, the PKCS documents have become widely referenced
and implemented. Contributions from the PKCS series have become part of many formal and de facto standards, including ANSI X9 documents, PKIX, SET,
S/MIME, and SSL. Note: PKCS #2 and PKCS #4 have been incorporated into
PKCS #1.”
siehe http://www.rsa.com/rsalabs/ (kopiert am 23. September 2007)
ˆ PKCS #1: RSA Cryptography Standard
Spezifikation zur Implementierung des RSA–Algorithmus sowohl zur Datenverschlüsselung als auch zur Erzeugung einer digitalen Signatur; es wird
u.a. festgelegt, wie eine Folge von Bytes als natürliche Zahl zu interpretieren ist, wie der Ablauf des Algorithmus inklusive Fehlermeldungen zu sein
hat und wie öffentlicher und privater Schlüssel formatiert werden sollen;
außerdem enthält die Spezifikation verschiedene OIDs (Object Identifier)
(OIDs sind eindeutige Kennungen von Objekten bzw. Verfahren, die in allen Standards einheitlich verwendet werden sollten; manchmal wird auch
eine URL anstelle meiner OID verwendet);
eine ausführlichere Beschreibung befindet sich z.B. in dem Buch von K.
Schmeh
ˆ PKCS #3: Diffie-Hellman Key Agreement Standard
(die ursprünglich vorhanden gewesenen Standards PKCS #2 und #4 sind
in PKCS #1 eingeflossen)
beschreibt Implementierung der Diffie–Hellman–Schlüsselvereinbarung,
mit deren Hilfe zwei Parteien einen geheimen Schlüssel vereinbaren können, den nur sie kennen; es werden die Datenformate und die Methoden
für die Darstellung der Schlüssel beschrieben
ˆ PKCS #5: Password–Based Cryptography Standard (PBE)
beschreibt eine Methode zur Generierung eines Schlüssels aus einem Passwort; diese Methode wurde von der IETF übernommen und als RFC2898
veröffentlicht
ˆ PKCS #6: Extended Certificate Syntax Standard
ein Extended Certificate ist ein X.509–digitales–Zertifikat, das von einer
CA (Certificate Authority) signiert wurde und zusätzliche Informationen
wie z.B. eine e–mail–Adresse enthält; dieser Standard wurde jedoch durch
die dritte Version des X.509–Formats (X.509v3) überflüssig
14
ˆ PKCS #7: Cryptographic Message Syntax Standard
beschreibt Format für verschlüsselte oder signierte Nachrichten; wird auch
als Cryptographic Message Syntax (CMS) bezeichnet; z.B. ist das in
S/MIME verwendete Format für verschlüsselte und signierte e–mails aus
PKCS#7 abgeleitet und in RFC3852 festgeschrieben
ˆ PKCS #8: Private–Key Information Syntax Standard
beschreibt ein Format für das verschlüsselte Ablegen eines Schlüssels, insbesondere des privaten Schlüssels asymmetrischer Verfahren (kann aber
auch für Schlüssel symmetrischer Verfahren verwendet werden); enthält
neben dem Schlüssel noch weitere Angaben, z.B. die OID des Algorithmus, für den der Schlüssel verwendet werden kann
ˆ PKCS #9: Selected Attribute Types
beschreibt genauer bestimmte Attibut–Typen, die in PKCS #6, PKCS #7
und PKCS #8 verwendet werden
ˆ PKCS #10: Certification Request Syntax Standard
beschreibt Syntax für die Anforderung eines digitalen Zertifikates; die Anforderung wird an eine CA gesendet, die bei Einhaltung des Standards diese
Anforderung auch versteht; zusätzlich ist festgelegt, wie eine CA sich zu
verhalten hat, damit sie zweifelsfrei die Identität des Zertifikat–Anforderers
feststellen kann
ˆ PKCS #11: Cryptographic Token Interface Standard
beschreibt ein Programmier–Interface mit Namen Cryptoki (”crypto key”)
zum Umgang mit kryptographischen Operationen unter Benutzung von
Hardware Tokens, Smartcards und USB–Smartkeys; beschreibt so auch
Smartcard–Support für SSL– und S/MIME–Transaktionen
ˆ PKCS #12: Personal Information Exchange Syntax Standard
legt ein Format fest für das Speichern und Transportieren beispielsweise
von privaten Schlüsseln und Zertifikaten
ˆ PKCS #13: Elliptic Curve Cryptography Standard
beschreibt verschiedene Verfahren der elliptische–Kurven–Kryptografie
ˆ PKCS #14: Pseudo–Random Number Generation Standard
beschreibt verschiedene Methoden zur Erzeugung von Pseudozufallszahlen,
es hat sich aber noch kein Standard etabliert
ˆ PKCS #15: Cryptographic Token Information Format Standard
beschreibt Standards, mit deren Hilfe es möglich werden soll, dass jedes
Token mit jeder Software verwendet werden kann und damit die Tokens
austauschbar sind
15
Standardisierungen und Standardisierungsgremien:
IEEE (Institute of Electrical and Electronics Engineers) veröffentlicht
IEEE–Standards, z.B. IEEE P1363 (Public–Key–Verfahren), IEEE 802.11 (WLAN) und IEEE802.1x
(Authentifizierung in Rechnernetzen)
http://www.ieee.org
NIST (National Institute of Standards and Technology) gehört zum US–Handelsministerium; z.B. die Verfahren DES, DSA und die SHA–Familie stammen von dort
http://www.nist.gov
IETF (Internet Engineering Task Force) hat zahlreiche Krypto–Standards herausgegeben; jeweils zuständige Arbeitsgruppen entwickeln zunächst Internet Drafts (Standardisierungsvorschläge); diese müssen von der IESG (Internet Engineering Steering
Group) befürwortet werden und werden dadurch zu einem RFC (Request for Comment), allerdings zunächst als Proposed Standard; nach Bestehen von Tests wird daraus
ein Draft Standard und schließlich ein offizieller Standard; die RFC’s werden mit Nummern versehen, z.B. behandeln RFC2246 das TLS–Protokoll und RFC1521 die Base64–
Codierung
http://www.ietf.org
http://www.ietf.org/rfc.html
ANSI (American National Standards Institute) definiert Standards für verschiedene
Bereiche, z.B. ANSI X9.17: ANSI-Standard zum Austausch geheimer Schluessel mit dem
DES-Algorithmus
http://www.ansi.org
BSI (Bundesamt für Sicherheit in der Informationstechnik) evaluiert und legt fest geeignete Sicherheitstechnik zum Einsatz in Bundesbehörden; legt fest, welche Krypto- und
Hashverfahren dem deutschen Signaturgesetz gerecht werden und wie die Evaluationsund Zertifizierungsverfahren für SigG-konforme CA’s aussehen
http://www.bsi.de
FIPS (Federal Information Processing Standard) vom NIST herausgegebene Standards, denen die Computersysteme der US-Regierung genügen sollen
http://www.itl.nist.gov/fipspubs
ISO (International Organization for Standardization) Internationale Organisation, die
zahlreiche Netzstandards (ISO-Protokolle) herausgibt
http://www.iso.org
NSA (National Security Agency) amerikanische Behörde, die sich intensiv mit Kryptologie und der weltweiten Überwachung und nachrichtendienstlichen Gewinnung von Daten
beschäftigt; verfügt über extrem leistungsstarke Rechner
http://www.nsa.gov
PKCS (Public Key Cryptography Standards) von RSA herausgegebene Standards, die
beschreiben, wie public–key–Kryptographie zuverlässig, sicher und kompatibel eingesetzt
wird
http://www.rsa.com/rsalabs/
Bundesnetzagentur betreibt die Wurzel–CA des deutschen Signaturgesetzes
http://www.bundesnetzagentur.de
16
ein paar weitere Links (aktuell am 23. September 2009):
http://www.cacr.math.uwaterloo.ca/hac/
(Menezes u.a.: Handbook of Applied Cryptography)
http://people.csail.mit.edu/rivest/crypto-security.html
(Pointer auf andere Web-Seiten zu Kryptography und Security)
http://www.ietf.org/html.charters/smime-charter.html
(S/MIME mail security)
http://www.ietf.org/html.charters/pkix-charter.html
(IETF Public-Key Infrastructure X.509)
http://www.pki-page.org/
(PKI-Page mit vielen krypt. Links)
http://www.openssl.org/
(OpenSSL)
http://www.gnupg.org/
(GNU Privacy Guard)
http://www.heise.de/security/
(aktuelle Meldungen zu Sicherheitslücken)
http://www.bouncycastle.org/
(BouncyCastle JCE-Provider)
http://www.rsa.com/
(RSA Homepage)
http://primes.utm.edu/
(Primzahlenseiten)
http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/Welcome.html
(C++ Klassen-Bibliothek für Arithmetik beliebiger Genauigkeit)
Die beiden letzten Folien, aber mit aktiven Links, befinden sich in der Datei
standards links.pdf.
17
Ein kleines vereinfachtes Beispiel für eine verschlüsselte Verbindung
(SSL; secure sockets layer):
ˆ Öffnen von www.sparkasse-leipzig.de mit einem Browser, z.B. Firefox:
rechts unten erscheint geschlossenes Schloss, und aus ”http” wird ”https”:
die Verbindung zwischen Browser und Sparkasse ist verschlüsselt;
Anklicken des Schlosses: genauere Information über verwendete Algorithmen und Zertifikate, als Beispiel wird hier der allgemeine Teil des Zertifikates wiedergegeben:
18
ˆ zuerst, nachdem der Browser dem Server der Sparkasse mitgeteilt hat, dass
er mit ihm kommunizieren möchte, sendet der Server u.a. seinen öffentlichen RSA–Schlüssel, der von VeriSign in einem Zertifikat mit Hilfe des geheimen Schlüssels von VeriSign digital signiert ist, an den Browser zurück;
der Browser kennt den zugehörigen öffentlichen Schlüssel von VeriSign und
kann damit die Echtheit des Zertifikats überprüfen
ˆ der Browser erzeugt einen Schlüssel (session key), mit dessen Hilfe die
Kommunikation mittels RC4 mit 128 Bit Schlüssellänge verschlüsselt wird;
diesen Schlüssel sendet er an den Server der Sparkasse, und zwar RSA–
verschlüsselt mit dem öffentlichen Schlüssel der Sparkasse; die Sparkasse
entschlüsselt den session key mit ihrem geheimen RSA–Schlüssel. Öffentlicher Schlüssel der Sparkasse:
19
ˆ Überprüfen der Korrektheit des öffentlichen Schlüssels von VeriSign am
Beispiel von Firefox:
Extras → Einstellungen → Erweitert → Zertifikate anzeigen → Zertifizierungsstellen → VeriSign Class 3 Public Primary Certificate (Builtin Object
Token) → Ansicht
man erhält den MD5– und SHA1–Fingerabdruck (kryptographischer Hashwert) des Zertifikates von VeriSign (VeriSign hat seinen öffentlichen
Schlüssel selbst signiert) und kann sich bei VeriSign erkundigen, ob er
korrekt ist
20
ˆ man kann also überprüfen, ob man mit der Sparkasse verbunden ist (vor-
ausgesetzt, VeriSign hat keine Fehler gemacht);
Wie weiß die Sparkasse, mit wem sie verbunden ist?
Entweder man hat sich selbst ein Zertifikat besorgt, das die Sparkasse überprüfen kann, oder man muss sich beispielsweise über ein Passwort und eine
PIN authentifizieren
Zertifikate
Zertifikate sind im Internet das Äquivalent zu amtlichen Dokumenten. Sie enthalten u.a.
ˆ Angaben zum Aussteller (”ausstellende Behörde”)
ˆ Angaben zum Inhaber (pers. Daten, e–mail–Adresse, Internet–Adresse, öf-
fentl. Schlüssel)
ˆ Angaben zur Gültigkeitsdauer
ˆ Angaben zum verwendeten Hash– und Signaturalgorithmus
ˆ alle diese Daten werden mit einer digitalen Signatur (unter Benutzung des
eben erwähnten Signaturalgorithmus’) der ausstellenden Behörde versehen
Standard für Zertifikate: ITU–Standard X.509 (ISO/IEC 9594-8 von 1997)
Versionsnummer (X.509v...)
Seriennummer des Zertifikates
Signatur– und Hashalgorithmus
Aussteller
Gütigkeitsdauer
Inhaber
öffentlicher Schlüssel des Inhabers
zusätzliche Angaben
Signatur des Ausstellers
Von besonderer Bedeutung sind die Certificate Revocation Lists (CRL’s), das
sind Datenbanken, in denen Zertifikate als nicht mehr gültig ausgewiesen werden (weil z.B. der private Schlüssel des Inhabers kompromittiert worden ist),
und deren Inhalte sich jeden Moment ändern können. Bevor man ein Zertifikat
benutzt, sollte man sich erst vergewissern, dass es noch gültig ist.
21
Spezifikation für OpenPGP (Auszug aus RFC 2440)
Auch beispielsweise in PGP kommen auf ähnliche Weise symmetrische und
asymmetrische Verschlüsselungsverfahren zur Anwendung.
General functions
ˆ OpenPGP provides data integrity services for messages and data files by
using these core technologies:
– digital signatures
– encryption
– compression
– radix-64 conversion
In addition, OpenPGP provides key management and certificate services,
but many of these are beyond the scope of this document.
ˆ Confidentiality via Encryption
OpenPGP uses two encryption methods to provide confidentiality: symmetric key encryption and public key encryption. With public key encryption,
the object is encrypted using a symmetric encryption algorithm. Each symmetric key is used only once. A new ”session key” is generated as a random
number for each message. Since it is used only once, the session key is
bound to the message and transmitted with it. To protect the key, it is
encrypted with the receiver’s public key. The sequence is as follows:
– The sender creates a message.
– The sending OpenPGP generates a random number to be used as a
session key for this message only.
– The session key is encrypted using each recipient’s public key. These
”encrypted session keys” start the message.
– The sending OpenPGP encrypts the message using the session key,
which forms the remainder of the message. Note that the message is
also usually compressed.
– The receiving OpenPGP decrypts the session key using the recipient’s
private key.
– The receiving OpenPGP decrypts the message using the session key.
If the message was compressed, it will be decompressed.
22
With symmetric key encryption, an object may be encrypted with a symmetric key derived from a passphrase (or other shared secret), or a two–
stage mechanism similar to the public key method described above in which
a session key is itself encrypted with a symmetric algorithm keyed from a
shared secret.
Both digital signature and confidentiality services may be applied to the
same message. First, a signature is generated for the message and attached to the message. Then, the message plus signature is encrypted using
a symmetric session key. Finally, the session key is encrypted using public
key encryption and prefixed to the encrypted block.
ˆ Authentication via Digital signature
The digital signature uses a hash code or message digest algorithm, and a
public key signature algorithm. The sequence is as follows:
– The sender creates a message.
– The sending software generates a hash code of the message.
– The sending software generates a signature from the hash code using
the sender’s private key.
– The binary signature is attached to the message.
– The receiving software keeps a copy of the message signature.
– The receiving software generates a new hash code for the received
message and verifies it using the message’s signature. If the verification
is successful, the message is accepted as authentic.
ˆ Compression
OpenPGP implementations MAY compress the message after applying the
signature but before encryption.
ˆ Conversion to Radix–64
OpenPGP’s underlying native representation for encrypted messages, signature certificates, and keys is a stream of arbitrary octets. Some systems
only permit the use of blocks consisting of seven-bit, printable text. For
transporting OpenPGP’s native raw binary octets through channels that
are not safe to raw binary data, a printable encoding of these binary octets
is needed. OpenPGP provides the service of converting the raw 8-bit binary octet stream to a stream of printable ASCII characters, called Radix-64
encoding or ASCII Armor.
Implementations SHOULD provide Radix-64 conversions.
23
Note that many applications, particularly messaging applications, will
want more advanced features as described in the OpenPGP-MIME document, RFC 2015. An application that implements OpenPGP for messaging
SHOULD implement OpenPGP-MIME.
ˆ Signature-Only Applications
OpenPGP is designed for applications that use both encryption and signatures, but there are a number of problems that are solved by a signatureonly implementation. Although this specification requires both encryption
and signatures, it is reasonable for there to be subset implementations that
are non-comformant only in that they omit encryption.
Beispielsweise verwendet PGP 7.03 die folgenden kryptographischen Algorithmen:
ˆ für die Verschlüsselung des Textes:
AES, CAST, IDEA, TripleDES, Twofish
ˆ zur Signaturerzeugung:
RSA, DSS
ˆ als Hash–Funktionen:
MD5, SHA–1
(vor der Signierung eines Textes wird ein Hashwert des Textes gebildet,
der in Wirklichkeit signiert wird)
ˆ als (verlustfreie) Kompressionsfunktion:
LZS (RFC 2395)
(der Text kann vor dem Verschlüsseln komprimiert werden; dann wird anstelle des ursprünglichen Textes der komprimierte Text verschlüsselt)
ˆ für den Schlüsselaustausch:
Diffie–Hellman
siehe z. B. auch
http://www.thunderbird-mail.de/wiki/Mailverschlüsselung mit GnuPG / PGP
http://www.thunderbird-mail.de/wiki/Mailverschlüsselung mit S/MIME
24
Kryptologie
Kryptographie
Kryptoanalyse
Kryptographie
ˆ Geheimhaltung, Vertraulichkeit (privacy, confidentiality) durch Chiffrieren
(Verschlüsseln, encryption), Dechiffrieren (Entschlüsseln, decryption)
ˆ Authentikation, Authentifizierung, Authentizität (authentication)
Teilnehmerauthentikation: Nachweis meiner Identität einem Rechner oder
einer Person gegenüber (Zertifikat, PIN, Ausweis, Passwort, Unterschrift,
biometrisches Merkmal, spezifisches Wissen, · · ·).
Nachrichtenauthentikation: Ursprung einer Nachricht zweifelsfrei belegen
(digitale Unterschrift, MAC,· · ·).
ˆ Nachrichten–Integrität (data integrity)
Erkennen, ob eine Nachricht unbefugt verändert wurde (Hashwert, kryptographische Prüfsumme, digitaler Zeitstempel, · · ·).
ˆ Verbindlichkeit (commitment)
Der Absender einer Nachricht soll später nicht leugnen können, dass die
Nachricht von ihm stammt.
ˆ Anonymität (anonymity)
Sich Hilfe holen oder sich beraten lassen, ohne sich erkennen zu geben.
ˆ elektronisches Geld (electronic money, electronic cash)
ˆ Steganographie
Verstecken von Informationen in Bildern
ˆ Copyright
digitale Wasserzeichen
25
Kryptoanalyse
ˆ Versuch, aus der verschlüsselten Nachricht (cipher text) ohne a priori
Kenntnis eines Schlüssels (key’s) die ursprüngliche Nachricht (message,
plain text, Klartext) wiederherzustellen =⇒ Angriff, Attacke
ˆ Wie sicher ist eine Verschlüsselung?
ˆ Welche Angriffsmöglichkeiten gibt es?
Es wird davon ausgegangen, dass das Übermitteln von Nachrichten
abgehört werden kann.
Es wird weiterhin davon ausgegangen, dass die Verschlüsselungsalgorithmen allgemein bekannt sind, so dass die Sicherheit eines Verfahrens davon abhängt, ob der richtige Schlüssel gefunden werden kann.
Nachrichtenübermittlung mit Verschlüsselung:
Alice sendet an Bob eine verschlüsselte Nachricht
Schlüssel 1
Alice
Klartext
Chiffretext (Geheimtext)
Verschlüsselung
Mr. X
man in the middle
eavesdropper
mallory
Schlüssel 2
Chiffretext
Entschlüsselung
26
Klartext
Bob
Kryptosystem
P:
Menge von Klartexten (plain texts, messages)
C:
Menge von Chiffretexten (cipher texts, Geheimtexte)
K1 :
Menge von Schlüsseln zum Verschlüsseln von Klartexten
K2 :
Menge von Schlüsseln zum Entschlüsseln von Geheimtexten
K: Menge von Paaren (k1, k2) mit k1 ∈ K1 , k2 ∈ K2 , so dass f (k1, k2) = true
ist für eine boolesche Funktion f
(wenn k1 zum Verschlüsseln benutzt worden ist, so muss k2 zum Entschlüsseln
benutzt werden)
E := {Ek1 | k1 ∈ K1 }: Familie von Chiffrieralgorithmen
D := {Dk2 | k2 ∈ K2 }: Familie von Dechiffrieralgorithmen
Für jedes m ∈ P und jedes Paar (k1, k2) ∈ K muss gelten:
Dk2 (Ek1 (m)) = m
27
symmetrische Kryptosysteme (secret key cryptosystems)
k1 und k2 sind geheim (und oft gleich)
Alice sendet an Bob eine verschlüsselte Nachricht
eavesdropper
key source
k
secure channel
k
encryption
E (m) = c
k
decryption
c
unsecure channel
D (c) = m
k
m
m
m
plaintext m
Alice
Bob
k: gemeinsamer geheimer Schlüssel (secret key)
m: Klartext, Nachricht, message, plaintext
c: Geheimtext, Chiffretext, ciphertext
(Alice und Bob können denselben Tresor öffnen, der zur Hinterlegung und damit
Übermittlung der Nachrichten dient.)
28
asymmetrische Kryptosysteme (public key crypto systems)
Alice sendet an Bob eine verschlüsselte Nachricht, wobei zur Verschlüsselung
Bob’s öffentlicher Schlüssel benutzt wird
Mr. X
e
key source
unsicherer Kanal
d
encryption
Ee (m) = c
decryption
c
unsicherer Kanal
D (c) = m
d
m
m
m
plaintext m
Alice
Bob
k1 bzw. hier e: öffentlicher Schlüssel (public key) von Bob
k2 bzw. hier d: nicht öffentlicher Schlüssel (private key) von Bob
m: Klartext (plaintext)
c: Geheimtext (ciphertext)
(Alice wirft eine Nachricht in Bob’s Briefkasten, den nur dieser öffnen kann.)
29
asymmetrische Kryptosysteme zur Erzeugung einer digitalen Unterschrift
Alice sendet an Bob eine Nachricht, die von ihr digital signiert ist
eavesdropper
key source
e
d
ds = Ed (md)
md = De (ds)
ds
md
ja
md
md = md1 ?
nein
md1
accept
md = h(m)
md1 = h(m)
accept
m
plaintext m
do not
m
m
m
Bob
Alice
k1 bzw. hier d: private key von Alice
k2 bzw. hier e: public key von Alice
m: Klartext (plaintext)
h: kryptographische Hash–Funktion
md: Hashwert (hash value, message digest, finger print)
ds: digitale Signatur (digitale Unterschrift, digital signature)
(Nur Alice hat den Schlüssel zu einem gläsernen Tresor, in den sie Nachrichten
hineinlegen kann.)
30
generelle Attacken
Ciphertext–Only–Attacke:
Mr. X kennt ein relativ großes Stück Ciphertext oder mehrere Ciphertexte, die
mit demselben Verfahren verschlüsselt wurden.
Er versucht, einen oder mehrere Klartexte oder gar den Schlüssel zu bestimmen.
Known–Plaintext–Attacke:
Mr. X kennt ein oder mehrere Paare von zusammengehörenden Klar– und Geheimtexten.
Er versucht, den verwendeten Schlüssel zu berechnen oder einen Algorithmus
zu finden, mit dem weitere Chiffretexte, die mit demselben Schlüssel erhalten
wurden, entschlüsselt werden können.
Chosen–Plaintext–Attacke:
Mr. X kennt wie eben ein oder mehrere Paare von zusammengehörenden Klar–
und Geheimtexten. Zusätzlich hatte Mr. X die Möglichkeit, ausgewählte Klartexte verschlüsseln zu lassen.
Er versucht dann wieder, den verwendeten Schlüssel zu berechnen oder einen
Algorithmus zu finden, mit dem weitere Chiffretexte, die mit demselben Schlüssel erhalten wurden, entschlüsselt werden können.
Chosen–Ciphertext–Attacke:
Mr. X hat zeitweisen Zugriff zum Dechiffrieralgorithmus, kann sich also für einige Chiffre–Texte die zugehörigen Klartexte berechnen.
Ziel ist, den Schlüssel zu bestimmen.
(Die schwierigste der obigen Attacken ist i. a. aufgrund ihrer schwachen Voraussetzungen die Ciphertext–Only–Attacke.)
31
kryptographisches Protokoll
Ein kryptographisches Protokoll dient wie jedes Protokoll einer bestimmten
Aufgabe und besteht aus einer Folge von Aktionen, an denen zwei oder mehr
Parteien beteiligt sind. Keine Aktion kann vor Abschluss der vorherigen ausgeführt werden. Weiterhin gilt:
1. Alle, die am Protokoll teilnehmen, müssen das gesamte Protokoll im voraus
kennen.
2. Alle Teilnehmer müssen sich an die vereinbarten Regeln halten.
3. Jede Aktion muss eindeutig festgelegt sein.
4. Das Protokoll muss vollständig sein: Jeder denkbaren Situation ist eine
bestimmte Aktion zugeordnet.
Die Aktionen können z.B. sein:
ˆ Ver– und Entschlüsseln von Nachrichten
ˆ Senden einer Nachricht an einen Teilnehmer
ˆ Nachricht mit digitaler Unterschrift versehen
ˆ Authentifizierung eines Teilnehmers
ˆ ···
32
Angriffe auf kryptographische Protokolle
ˆ Replay–Angriffe (replay–attacks)
Mallory fängt eine chiffrierte Nachricht von Alice an Bob ab und sendet
diese weitere Male an Bob. Falls die Nachricht eine Anweisung an Bob
enthält (z.B. einen bestimmten Gegenstand zu kaufen), so führt Bob diese
Anweisung wiederholt aus.
Der Angriff läuft ins Leere, wenn Alice ihre Nachricht vor dem Verschlüsseln mit einem Zeitstempel (time stamp) versehen hat.
ˆ Spoofing–Angriffe
Wenn Mallory das Protokoll kennt, mit dessen Hilfe Alice an Bob eine
Nachricht sendet, so kann er sich leicht Bob gegenüber als Alice ausgeben:
Er braucht nur die entsprechende IP–Adresse im Protokoll zu ändern.
Durch Maßnahmen zur Authentifizierung wird ein solcher Angriff unmöglich.
ˆ Man–in–the–middle–Angriffe
Mallory fängt die Kommunikation zwischen Alice und Bob ab und gibt
sich Alice gegenüber als Bob und Bob gegenüber als Alice aus.
Vermeidung eines solchen Angriffs z.B. durch Verwendung von PKI (public key infrastructure) und digitalen Zertifikaten sowie anderen Methoden
zur Authentifizierung (Name/Passwort, one–time–Passwörter (RFC 1938),
z.B. TAN’s (transaction numbers), Frage–und–Antwort (challenge–and–
response) wie z.B. bei der Authentifizierung eines Handys in Mobilfunknetzen), gegenseitige Authentifizierung und Schlüsselaustausch mit Hilfe
einer dritten vertrauenswürdigen Partei (TTP, trusted third party) wie
z.B. im Kerberos–Protokoll (s.u.)
ˆ Hijacking
Kann als Kombination von Spoofing– und Man–in–the–middle–Attacken
aufgefasst werden: Zusätzlich zum Man–in–the–middle–Angriff blockiert
Mallory die Kommunikation zwischen Alice und Bob ab einem bestimmten
Zeitpunkt und kommuniziert etwa nur noch mit Bob.
ˆ Denial–of–Service–Angriffe (DoS)
Mallory versucht, eine Kommunikation zwischen Alice und Bob zu verhindern, indem er Nachrichten blockiert, Nachrichten fälscht oder abgefangene
(und manchmal gefälschte) Nachrichten in großer Anzahl immer wieder an
Bob sendet, damit dieser zumindest zeitweise nicht die Nachrichten von
Alice lesen kann.
33
Substitutions–Chiffre (am Beispiel Z26 )
P:
Menge aller Texte über Z26 := {0, 1, · · · , 25}
C:
Menge aller Texte über Z26 := {0, 1, · · · , 25}
K := {(P, P −1 ) | P und P −1 sind zueinander inverse Permutationen
über Z26}
EP (x) := P (x) für x ∈ Z26
DP −1 (x) := P −1 (x) für x ∈ Z26
Affine Chiffre (Tauschchiffre) (am Beispiel Z26 ):
P:
Menge aller Texte über Z26 := {0, 1, · · · , 25}
C:
Menge aller Texte über Z26 := {0, 1, · · · , 25}
K1 , K2 := {(a, b) | a, b ∈ Z26
∧
gcd(a, 26) = 1}
K := {((a, b), (c, d)) | (a, b) ∈ K1 ∧ c = a−1 (mod 26)
∧ d = a−1 ∗ b (mod 26)}
E(a,b) (x) := a ∗ x + b
(mod 26)
D(c,d) (y) := c ∗ y − d (mod 26)
mit c = a−1
(mod 26), d = a−1 ∗ b
(mod 26)
34
Relative Häufigkeiten der Buchstaben in (genügend langen) deutschen bzw.
englischen Texten (in Prozent)
Buchstabe
a
b
c
d
e
f
g
h
i
j
k
l
m
deutsch
6.51
1.89
3.06
5.08
17.4
1.66
3.01
4.76
7.55
0.27
1.21
3.44
2.53
englisch
8.2
1.5
2.8
4.3
12.7
2.2
2.0
6.1
7.0
0.2
0.8
4.0
2.4
Buchstabe
n
o
p
q
r
s
t
u
v
w
x
y
z
deutsch
9.78
2.51
0.79
0.02
7.00
7.27
6.15
4.35
0.67
1.89
0.03
0.04
1.13
englisch
6.7
7.5
1.9
0.1
6.0
6.3
9.1
2.8
1.0
2.3
0.1
2.0
0.1
Daraus ergeben sich folgende relative Häufigkeiten für Buchstabengruppen in
deutschen Texten:
Gruppe
e, n
i, s, r, a, t
d, h, u, l, c, g, m, o, b, w, f, k, z
p, v, j, y, x, q
Anteil in Prozent
27.18
34.48
36.52
1.82
Relative Häufigkeiten von Bigrammen in (genügend langen) deutschen Texten
(in Prozent):
Buchstabenpaar
en
er
ch
te
de
Häufigkeit
3.88
3.75
2.75
2.26
2.00
Buchstabenpaar
nd
ei
ie
in
es
35
Häufigkeit
1.99
1.88
1.79
1.67
1.52
Polyalphabetisches Chiffrieren mit mengenwertigen Abbildungen f
am Beispiel der Alphabete Z26 und {00, 01, · · · , 98, 99}
P:
Menge aller Texte über Z26 := {0, 1, · · · , 25}
C:
Menge aller Texte über {00, 01, · · · , 98, 99}
K1 , K2 := {f | f : Z26 −→ ℘({00, · · · , 99}) ∧
f (α) 6= ∅
∧
(α 6= β → f (α) ∩ f (β) = ∅)}
Ef (x) := beliebiges Element aus f (x)
Df (y) := f −1(y)
(allgemein: ersetze Z26 durch ein Alphabet A und {00, · · · , 99} durch ein Alphabet B mit card(A) ≤ card(B))
Vigenére–Chiffre (am Beispiel Z26):
m:
Schlüsselwortlänge
P:
Menge aller Texte der Länge m über Z26
C:
Menge aller Texte der Länge m über Z26
K1 , K2 := Menge aller Texte der Länge m über Z26;
für jedes k1 ∈ K1 , k1 := (κ1, · · · , κm ), sei k1 = k2 und
Ek1 (β1, · · · , βm ) := (β1 + κ1 , · · · , βm + κm ) (mod 26)
Dk1 (γ1, · · · , γm) := (γ1 − κ1 , · · · , γm − κm ) (mod 26)
36
Kasiski– und Friedman–Test
Kasiski–Test (bestimmt ein Vielfaches der Schlüsselwortlänge):
1. suche im Ciphertext Paare von (möglichst langen) gleichen Zeichenketten
und bestimme die jeweiligen Abstände ihrer ersten Zeichen
2. bestimme den größten gemeinsamen Teiler aller dieser Abstände; dieser
ist ein Vielfaches der Schlüsselwortlänge, es sei denn, unter den Paaren
gleicher Zeichenketten ist ein solches, das zufällig nicht durch Chiffrieren
zweier gleicher Klartext–Zeichenketten entstanden ist
Friedman–Test (bestimmt die Größenordnung der Schlüsselwortlänge):
1. Es sei n1 die Anzahl der a’s, · · ·, n26 die Anzahl der z’s in einem deutschen
Klartext mit n Zeichen. Dann gibt der Friedman’sche Koinzidenzindex
I mit
P26
ni ∗ (ni − 1)
I = i=1
n ∗ (n − 1)
ungefähr die Wahrscheinlichkeit dafür an, dass zwei willkürlich aus dem
Text herausgegriffene Buchstaben gleich sind
2. Nach der Tabelle über die relativen Häufigkeiten p1 , · · · , p26 der Buchstaben
in deutschen Texten mit großer Länge n ist
26
X
i=1
p2i = 0.0762
Also mit 7.62–prozentiger Wahrscheinlichkeit sind zwei willkürlich aus dem
Text herausgegriffene Buchstaben gleich.
3. Falls in einem Text alle 26 Buchstaben gleichoft vorkommen würden (pi =
1/26 für alle i, 1 ≤ i ≤ 26), so wäre
26
X
i=1
p2i = 26 ∗
1
1
=
≈ 0.0385
262
26
(kleiner kann I nicht werden).
37
4. Annahme: Das Schlüsselwort besteht aus s paarweise verschiedenen Buchstaben. Man denke sich dann den Ciphertext, der aus n Zeichen besteht,
fortlaufend in s Spalten geschrieben.
Anzahl der Möglichkeiten, ein Paar aus einer Spalte zu wählen:
n
n ∗ (n − s)
n ∗ ( − 1)/2 =
s
2s
Anzahl der Möglichkeiten, ein Paar aus verschiedenen Spalten zu wählen:
n
n2 ∗ (s − 1)
n ∗ (n − )/2 =
s
2s
5. Also gilt für die erwartete Anzahl A von Paaren gleicher Buchstaben
n ∗ (n − s)
n2 ∗ (s − 1)
A≈
∗ 0.0762 +
∗ 0.0385
2s
2s
Die Wahrscheinlichkeit dafür, dass ein Paar willkürlich herausgegriffener
Buchstaben gleich ist, hat also ungefähr den Wert
A
≈I
n ∗ (n − 1)/2
Daraus ergibt sich für s
s≈
0.0377 ∗ n
(n − 1) ∗ I − 0.0385 ∗ n + 0.0762
Bestimmung des Schlüsselwortes:
Da die s Spalten jede für sich durch eine Verschiebechiffre erzeugt wurden,
reicht es aus, etwa jeweils den Buchstaben zu finden, der durch Chiffrieren von
e entstanden ist.
38
Hill–Chiffre (am Beispiel Z26)
m ∈ N, m ≥ 1 vorgegeben;
P:
Menge aller Texte der Länge m über Z26
C:
Menge aller Texte der Länge m über Z26
K := {(A, A−1) | A und A−1 sind modulo 26 zueinander inverse
(m, m)–Matrizen über Z26 }



EA (x1, · · · xm) := A ∗ 

x1
..
.
xm








DA−1 (y1, · · · , ym ) := A−1 ∗ 

für (x1, · · · , xm) ∈ (Z26)m
y1
..
.
ym





für (y1, · · · , ym) ∈ (Z26)m
(falls Klar– bzw. Geheimtext länger sind als m, so werden sie in Blöcke der
Länge m zerlegt; evtl. Auffüllen (padding) des letzten Blockes)
Spezialfall: Falls A (und damit auch A−1) eine Permutationsmatrix ist, so spricht
man auch von einer Permutationschiffre.
39
One–time Pad
n ≥ 1:
Länge des Plaintextes (hier als Bitfolge)
P := (Z2 )n
C := (Z2 )n
K1 , K2 := (Z2 )n
K := {(k, k) | k = (κ1 , · · · , κn ) ∈ (Z2 )n}
Ek (x) := (x1 + κ1 , · · · , xn + κn ) (mod 2)
Dk (y) := (y1 + κ1 , · · · , yn + κn ) (mod 2)
Für jede Verschlüsselung wird ein neuer, zufälliger Schlüssel k generiert und
benutzt.
Perfekte Sicherheit:
Ein Kryptosystem (P, C, K, E, D) heißt perfekt sicher, falls P (x | y) = P (x) gilt
für alle x ∈ P, y ∈ C.
Also: Jeder abgefangene noch so lange Geheimtext bringt keine neuen Erkenntnisse über den möglichen Klartext.
Es gilt für jedes Kryptosystem Γ = (P, C, K, E, D):
ˆ Es sei card(K) = card(P) = card(C);
dann liefert Γ perfekte Sicherheit ⇐⇒
jeder Schlüssel wird mit der gleichen Wahrscheinlichkeit 1/card(K) benutzt, und für jedes x ∈ P und jedes y ∈ C gibt es genau ein k ∈ K mit
Ek (x) = y
ˆ Γ perfekt sicher
=⇒ jedes x ∈ P kann mit geeignetem k ∈ K auf jedes
y ∈ C abgebildet werden
ˆ Γ perfekt sicher
=⇒
card(K) ≥ card(C) ≥ card(P)
40
Entropie als Maß für den Grad der Zufälligkeit
Es seien X eine diskrete Zufallsvariable, W (X) die Menge aller ihrer möglichen
Werte, und für ein beliebiges ξ ∈ W (X) sei P (X = ξ) die Wahrscheinlichkeit
dafür, dass X den Wert ξ annimmt (in der Praxis wird P (X = ξ) meist durch
die relative Häufigkeit des Wertes ξ ersetzt). Dann ist die Entropie H(X) von
X wie folgt definiert:
H(X) := −
X
ξ∈W (X)
P (X = ξ) ∗ log2 (P (X = ξ)) [Bit]
Beispiele:
ˆ Modelliert X zufällige Würfe einer nicht gezinkten Münze, so ist W (X) =
{W appen, Zahl}, jedes der beiden Ereignisse hat die Wahrscheinlichkeit
0.5, und die Entropie von X ist 1 Bit.
ˆ Modelliert X zufällige Würfe eines nicht gezinkten Würfels, so ist W (X) =
{1, 2, 3, 4, 5, 6}, jedes der sechs Ereignisse hat die Wahrscheinlichkeit 1/6,
und die Entropie von X ist − log2(1/6) ≈ 2.586 Bit.
ˆ Modelliert X ein zufälliges Grauwertbild mit 128 × 128 Pixeln, wobei jedes
Pixel völlig unabhänging von den anderen völlig zufällig einen der Werte
von 0 bis 255 annehmen kann, so kann X also 256128∗128 paarweise verschiedene Werte, alle mit der Wahrscheinlichkeit 1/256128∗128, annehmen.
Die Entropie von X ist damit − log2(1/256128∗128) = − log2 (2−8∗128∗128) =
8*128*128 = 131072 Bit.
ˆ Modelliert dagegen X die in einem Grauwertbild vorkommenden Grauwer-
te der einzelnen Pixel, so muss man die relativen Häufigkeiten der vorhandenen Grauwerte bestimmen und dann nach obiger Formel die Entropie
berechnen. Sind überhaupt nur die Grauwerte von 0 bis 255 möglich, so
kann die Entropie maximal den Wert 8 Bit haben (wenn nämlich alle Grauwerte gleich oft vorkommen).
ˆ Die Entropie eines Buchstabens in einer völlig zufälligen Zeichenkette, in
der überhaupt nur 26 paarweise verschiedene Zeichen vorkommen können,
ist log2 (26) ≈ 4.7 Bit.
ˆ Die Entropie eines beliebigen Zeichens in einem natürlichen deutschen oder
englischen Text liegt zwischen 1 Bit und 1.5 Bit (benutze Folie 35).
41
Es gilt:
ˆ Je mehr man über die Werte eines Zufallsstromes von n Bit weiß, d.h., je
weniger zufällig der Bitstrom eigentlich ist, umso geringer ist seine Entropie
(im Grenzfall 0 Bit, falls man weiß, dass alle Bit gleich sind; im anderen
Grenzfall n, falls jedes einzelne Bit völlig zufällig ist).
ˆ Je größer die Entropie ist, umso unsicherer ist man beim Erraten eines
Wertes.
ˆ Die Entropie ist gleichzeitig die durchschnittliche Anzahl von Bit, die man
benötigt, um die möglichen Werte darzustellen, falls man einen idealen
Komprimierungsalgorithmus zur Verfügung hat.
Mittlere Codewortlänge ml:
ml :=
X
ξ∈W (X)
P (X = ξ) ∗ lξ
wobei lξ die Länge des Codewortes (das sich durch Anwendung des Komprimierungsalgorithmus’ ergibt) zur Darstellung von ξ ist.
42
Stromchiffrierung
hier: Beschränkung auf Z2 als Alphabet
P := Menge aller Texte über Z2
C := Menge aller Texte über Z2
K1 , K2 := Menge aller Texte über Z2
K := {(k, k) | k = (κ1 , · · · , κn ) ∈ K1 }
für jedes p ∈ P, p = (p1, · · · , pn), und jedes k ∈ K1 mit gleicher Länge,
k = (κ1, · · · , κn ), sei
Ek (p) := (p1 + κ1 , · · · , pn + κn ) (mod 2)
für jedes c ∈ C mit Ek (p) = c ist dann Dk (c) = p, wenn
Dk (c) := (c1 + κ1 , · · · , cn + κn ) (mod 2)
gesetzt wird.
Zur Erzeugung eines Schlüssels (”Schlüsselstromes”) k wird meist ein Zufallszahlengenerator (key stream generator) verwendet, der seinerseits von einem
Schlüssel (⇒ Initialisierung) sowie evtl. von den bis zu einem Zeitpunkt gerade
betrachteten Klartextzeichen abhängen kann.
Bei nur einmaliger Benutzung ein und desselben Schlüssels hat man wieder das
one–time pad.
43
Vorteil:
Falls einmal ein Bit fehlerhaft übermittelt wird, so wird auch nur diese eine Bit fehlerhaft
entschlüsselt (also keine ”Langzeitwirkung”).
Nachteile:
ˆ Falls ein Bit überhaupt nicht ankommt, so entsteht ab dort beim Entschlüsseln nicht mehr
der gewünschte Klartext. Eine erneute Synchronisation ist notwendig.
ˆ Falls ein und derselbe Schlüsselstrom mehrfach verwendet wird:
1. Wenn Mr. X einen Chiffretext und den dazugehörigen Klartext besitzt, so erhält er
durch xor–Verknüpfung der beiden den Schlüsselstrom und könnte weitere Chiffretexte dechiffrieren (known–plaintext–Attacke erfolgreich).
2. Wenn Mr. X zwei verschiedene Chiffretexte besitzt, die mit dem gleichen Schlüsselstrom chiffriert wurden, so erhält er durch deren xor–Verknüpfung gleichzeitig die
xor–Verknüpfung der zugehörigen Klartexte. Daraus können aber u.U. relativ leicht
(s. nächste Folie) die Klartexte und der zugehörige Schlüsselstrom erhalten werden
(ciphertext–only–Attacke erfolgreich).
3. Angriff durch Einfügen:
Klartext:
Schlüsselstrom:
Chiffretext:
p1 p2 p3 · · ·
k1 k2 k3 · · ·
c1 c2 c3 · · ·
Wenn es Mr. X schafft, einen Klartextbuchstaben p′ in den Klartext einzufügen, etwa
unmittelbar hinter p2 , und weiterhin der veränderte Klartext wieder mit dem ursprünglichen Schlüsselstrom chiffriert wird, so kann er aus den beiden Chiffretexten
den Klartext ab der Einfügeposition erhalten (chosen–plaintext–Attacke erfolgreich):
Klartext:
Schlüsselstrom:
Chiffretext:
p1 p2 p′ p3 · · ·
k1 k2 k3 k4 · · ·
c1 c2 c′3 c′4 · · ·
Mr. X kennt p′ (und die Chiffretexte) und kann damit sukzessive berechnen:
k3 = p′ + c′3
k4 = p3 + c′4
k5 = p4 + c′5
p 3 = k 3 + c3
p 4 = k 4 + c4
p 5 = k 5 + c5
usw. (alle Berechnungen modulo 2).
Auch wenn Mr. X die Einfügestelle nicht genau kennt, so kann er sie durch Vergleichen von c1 c2 c3 c4 · · · mit c1 c2 c′3 c′4 · · · finden.
44
Beispiel zur xor–Verschlüsselung
Bild 3 ist durch xor–Verknüpfung von Bild 1 mit dem Zufallsbild 2 und Bild 5
durch xor–Verknüpfung von Bild 4 ebenfalls mit dem Zufallsbild 2 entstanden.
Werden jetzt die Geheimtexte Bild 3 und Bild 5 xor-verknüpft, so entsteht Bild
6, aus dem die Inhalte von Bild 1 und Bild 4 (das sind hier die Klartexte)
rekonstruiert werden können. Durch xor–Verknüpfung von Bild 1 mit Bild 3
würde man dann den Schlüssel Bild 2 erhalten.
Bild 1
Bild 2
Bild 3
Bild 4
Bild 5
Bild 6
45
Zufallszahlengeneratoren
Die Sicherheit einer Stromchiffre wie beispielsweise die des one–time–pads
und vieler anderer kryptographischer Algorithmen, die Zufallszahlen benötigen, hängt wesentlich davon ab, dass ein Angreifer diese Werte weder erraten noch berechnen kann. Die Quelle der Zufallszahlen muss also mindestens eine möglichst hohe Entropie haben. Darüber hinaus verlangt man von
einem Pseudo–Zufallszahlen–Generator (PRNG) noch die beiden folgenden
Eigenschaften, um ihn einen kryptographisch sicheren Pseudo–Zufallszahlen–
Generator (CSPRNG) nennen zu können:
ˆ Er sollte den nächste–Bit–Test erfüllen: Angenommen, man kennt be-
reits die ersten k Bits des erzeugten Schlüsselstromes, so soll es nicht in
polynomialer Zeit möglich sein, mit einer Wahrscheinlichkeit größer als 0.5
das nächste Bit (das (k + 1)–te Bit) zu berechnen (egal, wie groß k ∈ N
ist).
ˆ Er sollte den nicht–Zurückverfolgbarkeits–Test erfüllen: Falls jemand
den augenblicklichen Zustand des Generators kennt oder korrekt erraten
hat, so sollte es ihm nicht möglich sein, davon ausgehend den bis dahin
erzeugten Bitstrom zu rekapitulieren.
Neben den auf den folgenden Folien und im Abschnitt zu den zahlentheoretischen Grundbegriffen vorgestellten PRNG’s gibt es weitere zum Teil standardisierte Algorithmen wie den ANSI–Standard X9.17, wo mit Hilfe von Triple–DES
(s. u.) eine zufällige Bitfolge erzeugt wird. Auch können die Zufallsbits verschiedener Generatoren gemischt und darauf kryptographische Hash–Funktionen angewendet werden, um sichere Zufallsbits zu erhalten.
Schließlich werden in Menezes et.al., Kapitel 5, weitere Algorithmen vorgestellt
(z. B. der FIPS–186–Generator) sowie Methoden zur Nachbearbeitung zufällig
erzeugter Bitfolgen, um deren statistische Eigenschaften zu verbessern. Zur Beurteilung der Zufälligkeit der erzeugten Bits kann der Statistik–Test FIPS–140-1
herangezogen werden.
46
Erzeugung eines Schlüsselstromes durch lineare Rekursion bzw. mit
Hilfe von linearen rückgekoppelten Schieberegistern (LFSR)
ˆ lineare Rekursion vom Grad m
zi+m :=
m−1
X
j=0
cj ∗ zi+j
(mod 2),
(i ≥ 0)
wobei c0 , · · · , cm−1 ∈ Z2 vordefinierte Konstanten sind;
k := (z0 , · · · , zm−1) ist der Schlüssel, durch ihn erfolgt die Initialisierung
ˆ Die obige lineare Rekursion entspricht dem folgenden m–stufigen linearen
rückgekoppelten Schieberegister, das im Anfangszustand gegeben ist:
+
* cm-1
z
m-1
+
+
* c m-2
*c 1
z
m-2
z
1
*c 0
z
0
(s. auch: Menezes et al.: chapter 5, pseudorandom bits and sequences)
47
Funktelefone mit GSM–Standard (Group Special Mobile), z.B. D1,
D2 und e–plus
handy
sprechen
digitalisieren
komprimieren
verschlüsseln
114 Bit lange
Datenpakete
Funk
Basisstation
dechiffrieren
Basisstation
Glasfaser
chiffrieren
handy
dechiffrieren
zusammensetzen
Analog- bzw. Digitaltelefon
hören
hören
Nachrichtenübermittlung mit Verschlüsselung zwischen Handy und Basisstation, wobei die Verschlüsselung mit dem A5–Algorithmus (Stromchiffre) erfolgt.
48
A5/1–Algorithmus
3 LFSR’s mit 19, 22 bzw. 23 Bit Länge, also insgesamt 64 Bit Schlüssellänge
für die Initialisierung
XOR–Verknüpfung im ersten LFSR: 13, 16, 17, 18
XOR–Verknüpfung im zweiten LFSR: 20, 21
XOR–Verknüpfung im dritten LFSR: 7, 20, 21, 22
(s. z. B. Schmeh, S. 249)
Ausgabe: XOR–Verknüpfung der drei LFSR’s
0
18
+
0
21
+
+
0
22
+
: clocking tap
Jedes Register wird abhängig von seinem mittleren Bit (clocking tap) getaktet:
Wenn es in den drei clocking taps mehr Einsen als Nullen gibt, dann werden
diejenigen LFSR’s weitergeschaltet, die in ihren clocking taps eine Eins haben.
Wenn es dagegen in den drei clocking taps mehr Nullen als Einsen gibt, dann
werden diejenigen LFSR’s weitergeschaltet, die in ihren clocking taps eine Null
haben. Damit werden in jedem Takt immer mindestens zwei LFSR’s weitergeschaltet.
Mit dem erzeugten Bitstrom werden die Nachrichten xor–ver– bzw. entschlüsselt.
49
GSM–Standard
ˆ in jedem Funktelefon ist SIM–Karte, die Chip enthält
ˆ im Chip: Seriennummer, geheime Zahl Z (in jedem Chip andere), Algo-
rithmen A3 und A8 (nicht spezifiziert; A3 für Authentifizierung, A8 für
Schlüsselübergabe; jeder Netzbetreiber hält diese Algorithmen geheim)
ˆ auch Netzbetreiber hat Z in seinem Computer
ˆ Vorgehensweise: Teilnehmer will anrufen =⇒ Chip sendet seine Serien-
nummer (damit ist Teilnehmer bekannt) =⇒ Computer sucht zugehörige
Geheimzahl Z und sendet eine Zufallszahl RAND als Antwort =⇒ Chip
berechnet aus RAND und Z mit Hilfe von A3 eine 32–Bit–Antwort RES
=⇒ RES wird an Basisstation gesendet =⇒ Basisstation hat selbst RES’
berechnet und vergleicht =⇒ falls RES = RES’, so Anruf zulässig, d.h.,
Netz wird nicht unbefugt von anderen benutzt
ˆ zusätzlich: Chip und Rechner der Basisstation berechnen jeder für sich
mittels A8 den 64–Bit–Sitzungsschlüssel K (der also nicht gefunkt zu werden braucht), mit dem jede Seite für sich mit Hilfe von A5 chiffriert und
dechiffriert
ˆ Ausland: A3 und A8 i.a. anders; ausländisches Netz erkennt, dass Handy
nicht angemeldet ist, und lässt sich im voraus RAND, RES und K zur
Authentifizierung und Chiffrierung senden (Verträge der Netzanbieter untereinander)
50
Vergleich GSM mit UMTS
GSM
UMTS
64–Bit–Schlüssel, effektiv nur 54–
128–Bit–Schlüssel
Bit–Schlüssel
Verschlüsselung nur bis zur Basissta- Verschlüsselung reicht tiefer
ins Netz hinein
tion
geheimgehaltene Algorithmen
Algorithmen sind offengelegt
Sicherheit basiert auf Geheimzahl in
ebenso
SIM–Karte
Authentifizierung über Tripletts (drei Benutzung von Quintetts
(fünf 128–Bit-Zahlen)
64–Bit–Zahlen)
pro Verbindungsaufnahme ein Tri- zusätzlich ”lokale Authentiplett erforderlich
fizierung”
nur das Handy muss sich gegenüber gegenseitige Authentifizierung von
Basisstation und Handy
der Basisstation authentifizieren
Integritätsprüfung mit dem
keine Identitätsprüfung des Datenintegrity key, replay und
stromes, aktive Angriffe (replay, man
man in the middle schwierig
in the middle) möglich
bis unmöglich
(Quelle: Computerzeitung vom 01.02.2001)
51
RSA–public–key–Verfahren zur Erzeugung eines Schlüsselstromes
z1 z2 · · · zt
gegeben:
p, q: zwei verschiedene große Primzahlen mit je m/2 Bit in Dualdarstellung; eine
natürliche Zahl t als Länge des zu erzeugenden Schlüsselstromes
n := p ∗ q
e eine Zufallszahl mit gcd(e, Φ(n)) = 1
(es ist dann Φ(n) = (p − 1) ∗ (q − 1)); n und e sind öffentlich, p, q und Φ(n)
sind geheim;
Schlüssel k ∈ Z∗n , k habe m Bits (oder auch einfach nur 1 ≤ k ≤ n − 1)
Iteration:
k1 := k,
ki+1 := kie mod n
(1 ≤ i ≤ t − 1);
Schlüsselstrom:
zj := kj mod 2
(1 ≤ j ≤ t)
Bemerkungen:
ˆ Wenn auf irgendeine Art und Weise von Mr. X ein zi bestimmt werden
konnte, so kann er auf dieser Basis nicht ki erhalten; selbst wenn er sich
irgendwie ein ki besorgt hat mit i > 1, so ist es für große Primzahlen p, q
(beispielsweise je mindestens 512 Bit lang) praktisch unmöglich, ki−1 und
damit letztlich k zu berechnen:
Denn um ki−1 aus ki berechnen zu können, muss man dasjenige d ∈ Z∗n
kennen, so dass
e ∗ d = 1 mod Φ(n), also (se )d = s mod n
für beliebiges s ∈ Z∗n
ist. φ(n) und damit d zu bestimmen (wenn man p und q nicht kennt) ist
aber genau so schwierig, wie n zu faktorisieren.
ˆ Damit es mit den bis jetzt bekannten Faktorisierungsalgorithmen praktisch
unmöglich ist, n zu faktorisieren bzw. Φ(n) zu berechnen, sollten p und q
zusätzlich die folgenden Eigenschaften haben:
Die Differenz | p − q | sollte möglichst groß sein.
p und q sollten starke Primzahlen sein, d.h., es sollte weiterhin gelten:
p − 1 hat einen großen Primfaktor, bezeichnet mit r;
p + 1 hat einen großen Primfaktor
und
r − 1 hat einen großen Primfaktor
52
MILLER–RABIN–Algorithmus zum Testen einer Zahl n auf
Primzahleigenschaft
gegeben:
eine ungerade natürliche Zahl n und eine natürliche Zahl t ≥ 1 als Sicherheitsparameter
gesucht:
Eine Antwort auf die Frage: ”Ist n eine Primzahl?”
Algorithmus:
ˆ bestimme diejenigen natürlichen Zahlen r und s, so dass gilt:
n − 1 = 2s ∗ r und r ungerade
ˆ for i:=1 to t do
1. wähle eine Zufallszahl a mit 2 ≤ a ≤ n − 1
2. y := ar mod n
3. if y 6= 1 and y 6= n − 1 then
begin j := 1;
while j ≤ s − 1 and y 6= n − 1 do
begin
y := y 2 mod n;
if y = 1 then return(’nein’);
j := j + 1;
end;
if y 6= n − 1 then return(’nein’);
end;
ˆ return(’ja’)
Bemerkungen:
ˆ Für jede ungerade zusammengesetzte Zahl n ist die Wahrscheinlichkeit dafür, dass obiger
MILLER–RABIN–Algorithmus das Resultat ’ja’ liefert, kleiner als (1/4)t . Oft ist diese
Wahrscheinlichkeit sogar viel kleiner als (1/4)t .
Dies beruht auf folgendem Fakt: Falls n eine zusammengesetzte ungerade Zahl ungleich
9 ist, so ist die Anzahl aller Zahlen a mit 2 ≤ a ≤ n − 1, die im MILLER–RABIN–
Algorithmus ein Resultat ’ja’ zur Folge hätten, kleiner gleich Φ(n)/4.
ˆ Der MILLER–RABIN–Algorithmus beruht auf dem kleinen Satz von FERMAT und darauf, dass die Zahl 1 modulo einer Primzahl n nur sich selbst und n-1 als Quadratwurzeln
hat. Modulo einer zusammengesetzten Zahl n hat die Zahl 1 stets weitere Quadratwurzeln
modulo n.
ˆ Falls der MILLER–RABIN–Algorithmus als Resultat ’nein’ liefert, so ist n garantiert
zusammengesetzt.
Falls n eine Primzahl ist, so liefert der MILLER–RABIN–Algorithmus garantiert den
Wert ’ja’.
53
Erzeugung einer starken Primzahl p (Algorithmus von GORDON)
ˆ erzeuge zwei große zufällige Primzahlen s und t mit ungefähr glei-
cher Bitlänge (Test auf Primzahleigenschaft etwa mit MILLER–RABIN–
Algorithmus)
ˆ wähle eine natürliche Zahl i0 ; finde die erste Primzahl r = 2it + 1, wobei i
nacheinander die Werte i0 , i0 + 1, i0 + 2, · · · durchläuft (Test auf Primzahleigenschaft wieder mit MILLER–RABIN–Algorithmus)
ˆ berechne p0 := (2sr−2 mod r)s − 1
ˆ wähle eine natürliche Zahl j0 ; finde die erste Primzahl p := p0 +2jrs, wobei
j nacheinander die Werte j0 , j0 + 1, j0 + 2, · · · durchläuft
ˆ p ist eine starke Primzahl
denn es gilt dann für die Primzahl p:
ˆ p + 1 = (2 ∗ sr−2 mod r) ∗ s − 1 + 2jrs + 1 = s ∗ (· · ·),
womit p + 1 den großen Primfaktor s hat;
ˆ seien λ und s′ diejenigen ganzen Zahlen, für die gilt:
s = λ ∗ r + s′ und 0 ≤ s′ < r;
dann gilt:
p − 1 = (2 ∗ (λ ∗ r + s′ )r−2 mod r) ∗ (λ ∗ r + s′ ) + 2jrs − 2 =
(2 ∗ (s′ )r−2 mod r) ∗ (λ ∗ r + s′ ) + 2jrs − 2 =
(2 ∗ (s′ )−1 mod r) ∗ (λ ∗ r + s′ ) + 2jrs − 2 =
(2 ∗ (s′ )−1 mod r) ∗ (λ ∗ r + s′ mod r) + 2jrs − 2 =
(2 ∗ (s′ )−1 mod r) ∗ λ ∗ r + 2 + 2jrs − 2 =
r ∗ (· · ·),
womit p − 1 den großen Primfaktor r hat
(es wurde unterwegs der kleine Satz von Fermat angewandt);
ˆ r − 1 = 2it hat den großen Primfaktor t
54
Diskretes–Logarithmus–Verfahren zur Erzeugung eines
Schlüsselstromes z0 z1 z2 · · ·
gegeben:
Primzahl p
primitives Element a mod p
Schlüssel k (k ∈ Z∗p )
Iteration:
k0 := k,
ki+1 := aki mod p
Schlüsselstrom:

 1,
f alls kj > p/2
zj := 
0,
f alls kj < p/2
(i ≥ 0);
(j ≥ 0)
Bemerkung:
Wenn Mr. X ein oder mehrere zi kennt, so kann er daraus nicht ki bestimmen.
Selbst wenn er sich ein ki ”besorgt” hat mit i > 0, so ist es für große Primzahlen
p doch praktisch unmöglich, ki−1 und damit letztlich k zu berechnen:
Denn um ki−1 aus ki berechnen zu können, muss loga (ki) mod p bestimmt werden.
Das RSA–public–key–Verfahren und eine Modifikation davon, der Blum–Blum–
Shub–Generator (siehe Projektaufgaben), liefern kryptographisch sichere Folgen
von Zufallsbits unter der Voraussetzung, dass die Faktorisierung von n praktisch unmöglich ist.
Analog liefert das diskrete–Logarithmus–Verfahren zur Erzeugung eines Schlüsselstromes eine solche Folge, falls das Lösen des diskrete–Logarithmus–Problems
in Z∗p praktisch unmöglich ist. Natürlich dürfen zusätzlich die Schlüssel nicht
erraten werden können.
55
Erzeugung eines Schlüsselstromes durch RC4 (Ron Rivest 1987)
es werden eine S–BOX (substitution box) S, hier eine Permutation
(S0 , S1, · · · , S255) der Menge {0, 1, · · · , 255}, sowie ein Schlüssel K variabler Länge verwendet
Initialisierung der S–Box:
ˆ setze S0 := 0, S1 := 1, · · ·, S255 := 255;
ˆ fülle ein Byte–Array (K0, K1 , · · · , K255) derart, dass der Schlüssel K immer
wieder hintereinandergeschrieben wird, bis alle 256 Bytes überdeckt sind
ˆ j := 0;
for i := 0 to 255 do
j := (j + Si + Ki ) mod 256;
vertausche Si mit Sj ;
Erzeugung von Zufallsbytes B:
ˆ i := 0; j := 0;
ˆ repeat
i := (i + 1) mod 256;
j := (j + Si) mod 256;
vertausche Si mit Sj ;
t := (Si + Sj ) mod 256;
B := St ;
until genügend viele Bytes B erzeugt sind
Der durch Hintereinandersetzen der Bytes B erzeugte Schlüsselstrom wird dann
mit dem Klartext xor–verknüpft.
Die Anzahl der möglichen internen Zustände ist definiert über die augenblicklichen Werte von i und j sowie von den Si.
RC4 ist ein besonders schneller und weit verbreiteter Algorithmus. Er wird
z. B. in Webbrowsern (SSL–Protokoll) und bei der Absicherung von Wireless LANs benutzt (WEP–, WPA– und WPA2–Protokolle). Allerdings gibt
es auch bekanntgewordene Angriffsmöglichkeiten, siehe dazu den Artikel
rc4 schwaechen.pdf.
56
Blockchiffrierungen im ECB–Modus
Gleiche Klartextblöcke werden (bei gleichem Schlüssel) stets in gleiche Chiffretextblöcke überführt, egal an welcher Stelle im Klartext sie sich befinden.
Verschlüsseln:
P
i
E
k
C
i
(i = 1, 2, ...)
Entschlüsseln:
C
i
D
P
i
k
k: Schlüssel;
Pi bzw. Ci mit i ≥ 1: Klar– bzw. Chiffretextblöcke mit je m Bit
Vorteile:
ˆ jeder Block kann unabhängig von jedem anderen verschlüsselt bzw. ent-
schlüsselt werden =⇒ gut für Datenbankeinsatz und Parallelisierung
ˆ ein Bitfehler bei der Übertragung bleibt auf den entsprechenden Block
beschränkt
Nachteile:
ˆ gleiche Bitfolgen (z.B. Kopf– und Fußzeilen) können zum Knacken des
Codes benutzt werden
ˆ geht bei Übertragung ein Bit verloren, so ab da keine korrekte Dechiffrie-
rung möglich (es sei denn, z. B. Blockanfang– und Blockendekennzeichen
sind vorhanden)
letzter Klartextblock zu kurz: Auffüllen (padding)
Angriffsmöglichkeiten: durch block replay
57
Blockchiffrierungen im CBC–Modus
Das Ergebnis der Verschlüsselung früherer Blöcke fließt in die Verschlüsselung
des aktuellen Blockes mit ein.
Verschlüsseln:
P
1
IV
P2
...
+
+
Ek
Ek
C
1
C
Entschlüsseln:
C1
2
C2
Dk
Dk
+
+
P
1
P
2
IV
Ci := Ek (Pi ⊕ Ci−1),
. . .
. . .
. . .
...
. . .
Pi := Ci−1 ⊕ Dk (Ci)
k: Schlüssel;
Pi bzw. Ci mit i ≥ 1: Klar– bzw. Chiffretextblöcke mit je m Bit
C0 := IV: Initialisierungsvektor mit m Bit (Zeitstempel oder Zufallsbits oder
nonce–generated; nonce: number used only once)
Eigenschaften:
ˆ letzter Block muss aufgefüllt werden
ˆ ein 1–Bit–Fehler (oder auch ein größerer Fehler) in Pi beeinflusst Ci und
die folgenden Ciphertextblöcke; jedoch beim Dechiffrieren wird Pi bis auf
diesen Fehler wieder hergestellt
ˆ ein Fehler in Ci wirkt sich nur auf Pi und Pi+1 aus; also keine Fehlerfort-
pflanzung
ˆ ein Synchronisationsfehler kann ab seinem Auftreten alles verfälschen
ˆ es können immer nur ganze Blöcke verschlüsselt werden
58
ˆ aufgrund des Geburtstagsparadoxons sind nach 2m/2 Blöcken identische
Blöcke zu erwarten, womit ein Angriff möglich wäre; jedoch: m=64
2m/2 Blöcke entsprechen 34 GByte
=⇒
ˆ geeignet zur Herstellung eines MAC (Message Authentication Code)
Geburtstagsparadoxon (Grundlage für den Geburtstagsangriff, birthday
attack):
Die Wahrscheinlichkeit dafür, dass in einem Raum mit genau 23 Leuten mindestens 2 davon am gleichen Tag Geburtstag haben, ist
1−
365∗364∗···∗343
36523
≈ 0.507 (das ist überraschend groß).
Verallgemeinerung: Ein Jahr habe m Tage. In einem Raum mögen sich genau n
Leute befinden. Dann ist die Wahrscheinlichkeit dafür, dass mindestens 2 davon
am gleichen Tag Geburtstag haben, gleich
1−
1−
Qn−1 m−i
m∗(m−1)∗···∗(m−n+1)
=
1
−
n
i=1 m
m
n(n−1)
Qn−1 − i
m = 1 − e− 2m
i=1 e
=1−
Qn−1
i=1 (1
− mi ) ≈
anderes Modell:
Der Wertebereich einer Hash–Funktion h habe m Elemente (z.B. MD5: 2128;
SHA1, RIPEMD160: 2160). Es werde von n zufällig aus dem Definitionsbereich
von h ausgewählten Elementen (das sind Zeichenketten) deren jeweiliger Hash–
Wert berechnet. Dann kann aus der obigen Formel n so bestimmt werden, dass
mit mindestens der Wahrscheinlichkeit 0.5 eine Kollision auftritt:
√
n(n−1)
setze 0.5 ≈ e− 2m ; Auflösung nach n ergibt n ≈ 1.17 ∗ m
Hashfunktion mit m = 2128 Hashwerten:
Nach ca. 264 zufälligen Hashwert–Berechnungen tritt mit der Wahrscheinlichkeit
0.5 eine Kollision auf.
59
MAC (message authentication code) und HMAC (hashed message
authentication code)
MAC:
ˆ kryptographische Prüfsumme, in die neben dem Text m auch noch ein
Schlüssel k eingeht; somit kann ein MAC (im Gegensatz zu einem Hashwert) nur von den Schlüsselinhabern berechnet und auch nur von diesen
verifiziert werden
ˆ wird daher verwendet für Überprüfung der Integrität (Unversehrtheit) des
Textes (”data integrity”) und zur Überprüfung der Herkunft des Textes
(”data origin authentication”)
HMAC:
ˆ MAC, der unter Benutzung einer kryptographischen Hashfunktion h
berechnet wird, meist nach der Vorschrift
HMAC(k, m) := h((k ⊕ a)||h((k ⊕ b)||m))
mit spezifischen Konstanten a, b
ˆ Beispiele:
HmacMD5 (siehe RFC 2104); basiert auf der kryptographischen Hashfunktion MD5 (RFC 1321); erzeugt message digest der Länge 16 Byte
HmacSHA1 (RFC 2104); basiert auf SHA1 (NIST FIPS 180-1); erzeugt
message digest der Länge 20 Byte
beide Algorithmen werden weitgehend in der Internetsicherheit eingesetzt,
z.B. in TLS (Transport Layer Security)
60
Blockchiffrierungen im CFB–Modus
Verschlüsselung in kleineren Einheiten (r Bit) als Blockgröße (m Bit) möglich,
wobei im Extremfall r=1 sein kann.
Spezialfall r=m
Verschlüsselung:
P
1
IV
Ek
+
P
2
Ek
C1
+
. . .
Ek
. . .
C2
. . .
C2
. . .
Entschlüsselung:
C1
IV
D
k
+
D
k
P
1
C0 := IV;
P
2
Ci := Pi ⊕ Ek (Ci−1),
Pi := Ci ⊕ Dk (Ci−1)
+
mit Ek = Dk und i ≥ 1
61
D
k
. . .
. . .
Blockchiffrierungen im OFB–Modus
ähnlich zu CFB; nützlich, um Fehlerfortpflanzungen zu vermeiden
Verschlüsseln und Entschlüsseln mit r = m ; O o := IV
P
1
m
Oo
m
E
k
m
+
m
m
C
1
E
k
. . .
O
1
. . .
C
1
m
Oo
m
D
k
m
+
m
D
k
. . .
m
P
1
. . .
Ci := Pi ⊕ Ek (Oi−1) ;
Pi := Ci ⊕ Dk (Oi−1)
für i ≥ 1; es ist hier Ek = Dk
62
Blockchiffrierungen im CTR–Modus
(Counter–Modus;
s. http://csrc.nist.gov/publications/nistpubs/800–38a/sp800-38a.pdf)
wie im OFB–Modus wird ein genügend langer Schlüsselstrom erzeugt, mit dem
die Klartextblöcke verschlüsselt werden; kann sowohl als Block– als auch als
Stromchiffre interpretiert werden;
Algorithmus:
Ki := Ek (N once||i)
Ci := Pi ⊕ Ki
mit i= 1, 2, · · ·
ˆ bemerkenswert einfache Methode zur Schlüsselstromerzeugung
ˆ Entschlüsselung wie Verschlüsselung, damit geringer Implementierungsauf-
wand
ˆ sehr einfach beliebig parallelisierbar
ˆ typische Unterteilung eines 128–Bit–Blockes N once||i:
48–Bit–message–Nummer gefolgt von 16 zusätzlichen Bits für die Nonce
gefolgt von 64 Bits für den Zähler i
(damit können 248 verschiedene Nachrichten mit demselben Schlüssel verschlüsselt werden, und jede Nachricht darf höchstens 268 Bytes lang sein)
63
Vorgeschichte von DES
ˆ bis Anfang der 70er Jahre: kryptogr. Forschung im nichtmilitärischen Be-
reich ziemlich planlos
ˆ kommerzielle Nutzer konnten vorhandene Algorithmen bzw. Geräte nicht
einschätzen
ˆ NBS (National Bureau of Standards; jetzt NIST (National Institute of
Standards and Technology)): Ausschreibung am 15.5.73 für einen standardisierten kryptographischen Algorithmus; er sollte erfüllen:
1. hoher Grad an Sicherheit
2. vollständige Spezifikation und leicht nachzuvollziehen
3. Sicherheit des Alg. soll nur vom gewählten Schlüssel abhängen (nicht
von der Geheimhaltung des Alg.)
4. Alg. soll für alle Anwender zur Verfügung stehen
5. Alg. soll an verschiedene Anwendungen angepasst werden können
6. kostengünstige hardwaremäßige Umsetzung
7. effiziente Benutzung
8. Alg. muss validiert werden können
9. Exportfähigkeit
ˆ DES wurde am 17.3.75 durch NBS veröffentlicht
ˆ am 23.11.76 als Bundesstandard anerkannt und zur Verwendung für alle
nicht geheimen Regierungsvorgänge freigegeben (Data Encryption Standard)
ˆ Richtlinien zum Gebrauch wurden herausgegeben (z.B. für Verschlüsselung
von Passwörtern)
ˆ 1981: ANSI (American National Standards Institute) erkannte DES als
Standard für privaten Sektor an (ANSI X3.92)
ˆ DES war alle 5 Jahre zu zertifizieren, zuletzt 1993 und 1998
64
Grobstruktur von DES
Klartext
64
Schlüssel
IP
64
64
Chiffrierung
48
Rundenschlüssel
64
IP
-1
64
Chiffretext
IP : Anfangspermutation
IP −1 : inverse Anfangspermutation
Chiffrierung geschieht in 16 Runden
65
48
Auswahl
Eine Runde der DES–Verschlüsselung (Feistel–Chiffre)
L
i-1
R
i-1
32
32
f
48
K
i
32
32
+
32
L
i
R
i
IP(Klartext) := L0 R0 , L0 und R0 mit je 32 Bit
Li := Ri−1
Ri := Li−1 ⊕ f (Ri−1, Ki)
Ki : Bitfolgen mit je 48 Bit, berechnet aus dem Schlüssel K, 1 ≤ i ≤ 16
Chiffretext := IP−1(R16L16)
Grundprinzip der Feistelchiffre: Zum Ver– und Entschlüsseln wird dieselbe
Funktion f verwendet. Es kann f beliebig kompliziert und braucht nicht invertierbar zu sein (s. Praktikum).
66
Wirkungsweise der in DES verwendeten Funktion f
K
R
32
E
48
48
E(R)
48
+
48
B1
B2
B3
B4
B5
B6
B7
B8
6
S1
S2
S3
S4
S5
S6
S7
S8
4
C1
C2
C3
C4
C5
32
P
32
f(R,K)
67
C6
C7
C8
Auswahltabelle der Funktion E:
32
4
8
12
16
20
24
28
1
5
9
13
17
21
25
29
2
6
10
14
18
22
26
30
3
7
11
15
19
23
27
31
4
8
12
16
20
24
28
32
5
9
13
17
21
25
29
1
Permutation P:
16
29
1
5
2
32
19
22
7
12
15
18
8
27
13
11
20
28
23
31
24
3
30
4
21
17
26
10
14
9
6
25
Substitutionsbox S1:
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
68
Berechnung der Rundenschlüssel K1 bis K16
K
64
PC1
56
C0
28
LS1
28
D0
28
LS1
28
C1
D1
LS2
LS2
LS16
LS16
C16
D16
56
56
PC2
PC2
48
48
K
1
K
16
Dechiffrieren eines mit DES chiffrierten Klartextes:
Auf den Chiffretext wird derselbe Algorithmus mit demselben Schlüssel K angewendet, wobei jedoch die Rundenschlüssel in der Reihenfolge K16, K15 , · · · ,
K1 verwendet werden.
Nachteil von DES: relativ kurze Schlüssellänge.
69
Auswahltabelle der Funktion PC1:
57
1
10
19
63
7
14
21
49
58
2
11
55
62
6
13
41
50
59
3
47
54
61
5
33
42
51
60
39
46
53
28
25
34
43
52
31
38
45
20
17
26
35
44
23
30
37
12
9
18
27
36
15
22
29
4
Auswahltabelle der Funktion PC2:
14
3
23
16
41
30
44
46
17
28
19
7
52
40
49
42
11
15
12
27
31
51
39
50
24
6
4
20
37
45
56
36
1
21
26
13
47
33
34
29
5
10
8
2
55
48
53
32
Nummern und Reihenfolge der Bits aus K in K1:
10
3
22
61
51
35
28
21
34
26
39
38
60
25
54
63
49 17 33 57 2 9 19 42
44 58 59 1 36 27 18 41
37 4 47 30 5 53 23 29
15 20 45 14 13 62 55 31
70
4 bekannte schwache Schlüssel in hexadezimaler Notation:
01 01 01 01
01 01 01 01
FE FE FE FE
FE FE FE FE
1F 1F 1F 1F
0E 0E 0E 0E
E0 E0 E0 E0
F1 F1 F1 F1
(Zweimal hintereinander mit demselben Schlüssel verschlüsselt ergibt wieder
den Klartext.)
3 bekannte Paare von ”halbschwachen” Schlüsseln (Auswahl):
01 FE 01 FE
01 FE 01 FE
FE 01 FE 01
FE 01 FE 01
1F E0 1F E0
0E F1 0E F1
E0 1F E0 1F
F1 0E F1 0E
01 E0 01 E0
01 F1 01 F1
E0 01 E0 01
F1 01 F1 01
(Wird der Klartext mit dem ersten Schlüssel verschlüsselt und anschließend der
Ciphertext mit dem zweiten, so erhält man wieder den Klartext.)
71
IDEA
ˆ ”International Data Encryption Algorithm”; patentrechtlich geschützt (in
Europa bis zum 16.11.2011, in den USA bis 25.5.2010), darf allerdings
für nichtkommerzielle Zwecke verwendet werden, wenn die Software einen
bestimmten Copyright–Vermerk enthält;
blockorientierter Algorithmus, der 1990 in Zürich entwickelt wurde; 128
Bit Schlüssellänge;
ˆ wird als sehr sicher eingeschätzt (obwohl zur Zeit noch Angriffsmöglichkei-
ten gesucht werden) und z.B. in PGP verwendet;
ˆ arbeitet mit Klartextblöcken der Länge 64 Bit;
ˆ der gleiche Algorithmus wird, allerdings mit unterschiedlichen Teilschlüs-
seln, sowohl zum Ver– als auch zum Entschlüsseln verwendet;
ˆ benutzt wie DES zum Verschlüsseln Konfusion und Diffusion, indem un-
terschiedliche algebraische Operationen gemischt angewendet werden (xor,
Addition modulo 216, Multiplikation modulo 216+1 von Teilblöcken der
Länge 16 Bit);
ˆ arbeitet in 8 Runden
Brute–force–Angriff: Angenommen, ein Computer könnte 2.000.000.000 IDEA–
Verschlüsselungen pro Sekunde bei einem brute–force–Angriff berechnen, so
würde er zum Durchprobieren aller 2128 Schlüssel
1
2 ∗ 109 sek
3.4 ∗ 1038
2128
Jahre ≈ 5.3 ∗ 1021Jahre
sek ≈
16
7
6.4
∗
10
∗ 3.2 ∗ 10 Jahr
benötigen.
72
Struktur von IDEA
X1
16
(1)
Z1
X2
16
16
(1)
Z2
X3
16
(1)
Z3
16
X4
16
16
(1)
Z4
16
(1)
eine
Z
5
16
(1)
Runde
Z
16 6
sieben
weitere
Runden
(9)
(9)
Z1
(9)
Z2
Y1
Ausgabetransformation
Y2
(9)
Z3
Z4
Y3
Xi : Klartextblöcke
Yi : Chiffretextblöcke
(r)
Zi : Schlüsselteilblock
⊕: bitweise xor–Verknüpfung von 16–Bit–langen Teilblöcken
+ : Addition von 16–Bit–Zahlen modulo 216
⊙: Multiplikation von 16–Bit–Zahlen modulo 216 + 1; der
Teilblock Null soll 216 entsprechen
73
Y4
(r)
Erzeugung der Teilschlüssel Zi
ˆ es werden insgesamt 52 Teilschlüssel je der Länge 16 Bit benötigt (je 6 in
jeder der 8 Runden und einmalig 4 für die Ausgabetransformation)
ˆ aus dem 128 Bit langen Schlüssel werden 8 Teilschlüssel je der Länge 16
Bit herausgenommen (6 für die 1. Runde und 2 für die 2. Runde)
ˆ der Schlüssel wird dann zyklisch um 25 Bit nach links verschoben und wie-
der in 8 Teilschlüssel zerlegt; die ersten 4 werden in der 2. Runde benutzt,
die letzten 4 in der 3. Runde
ˆ dann wird der Schlüssel wieder um 25 Bit nach links verschoben usw.
Entschlüsselung:
Läuft fast genauso ab wie die Verschlüsselung. Der einzige Unterschied besteht
darin, dass sich die Reihenfolge der Teilschlüssel umdreht und diese dann noch
modifiziert werden:
Der jeweilige Dechiffrierschlüssel ist entweder die additive Inverse (modulo 216)
oder multiplikative Inverse (modulo 216 + 1) des Chiffrierschlüssels (es ist 216 +
1 eine Primzahl). Dabei stellt in IDEA der Teilschlüssel, der nur aus Nullen
besteht, bezüglich der Multiplikation modulo 216 + 1 die Zahl 216 = −1 dar, so
dass hier die multiplikative Inverse von Null wieder Null ist.
Sind
(i)
(i)
(i)
(i)
(i)
(i)
Z1 , Z2 , Z3 , Z4 , Z5 , Z6
die Teilschlüssel der Runden 1 bis 8 (1 ≤ i ≤ 8) und
(9)
(9)
(9)
(9)
Z1 , Z2 , Z3 , Z4
die der Ausgabetransformation,
so sind
(9)
(9)
(9)
(8)
(9)
(8)
(Z1 )−1, -Z2 , -Z3 , (Z4 )−1, Z5 , Z6
die Teilschlüssel der 1. Dechiffrierungsrunde,
(10−i) −1
(Z1
(10−i)
) , -Z3
(10−i)
, -Z2
(10−i) −1
, (Z4
(9−i)
) , Z5
(9−i)
, Z6
die Teilschlüssel der Dechiffrierungsrunden 2 bis 8 (2 ≤ i ≤ 8) und
(1)
(1)
(1)
(1)
(Z1 )−1, -Z2 , -Z3 , (Z4 )−1
die Teilschlüssel der Ausgabetransformation der Dechiffrierung.
74
Vorgeschichte von AES
ˆ 1997 veröffentlicht das NIST folgende Kriterien für einen neuen Standard
AES als Nachfolger von DES:
– AES soll eine symmetrische Blockchiffre sein mit Blockgröße 128 Bit
und Schlüssellängen von 128, 192 und 256 Bit
– AES soll sicher sein gegen alle bekannten Angriffe, die Sicherheit soll
mathematisch begründet werden können
– AES soll einfach zu verstehen und effizient sowohl hardware– als auch
softwareseitig zu implementieren sein
– nach Möglichkeit soll AES auch weitere Blockgrößen und Schlüssellängen unterstützen
ˆ im August 1998 gibt das NIST die ersten 15 Kandidaten für AES bekannt
ˆ April 1999: die Kandidaten für das Finale werden bekanntgegegen
ˆ April 2000: 3. AES Candidate Conference mit öffentlichen Diskussionen
der folgenden 5 Algorithmen:
1. Mars von IBM
2. RC6 von RSA Laboratories
3. Rijndael der belgischen Krypto–Experten
Joan Daemen (* 1965) und Vincent Rijmen (* 1970)
4. Serpent von einem Entwicklerteam aus England, Israel und Norwegen
5. Twofish von Counterpane (Bruce Schneier)
ˆ 2.10.2000: Bekanntgabe des Gewinners; es ist Rijndael
ˆ Juni 2001: AES wird offiziell zum Federal Information Processing Standard
(FIPS)
ˆ AES erlaubt sowohl Block– als auch Schlüssellängen von 128, 192 und 256
Bit
75
Grobstruktur von AES
Klartextblock (128 Bit)
Schlüssel (192 Bit)
Schlüsselexpansion
+
K0
S0
Runde 1
+
K1
S1
Runde 2
+
K2
+
K11
S11
Runde 12
+
K12
Chiffretextblock (128 Bit)
76
Eine Runde der AES–Verschlüsselung (in der letzten Runde fehlt
MixColumn)
ByteSub
ShiftRow
MixColumn
Die Runden sind schlüsselunabhängig.
Anzahl der Runden in Abhängigkeit von Blockgröße b und Schlüssellänge k:
k=128
k=192
k=256
b=128 b=192 b=256
10
12
14
12
12
14
14
14
14
77
ByteSub–Transformation:
ˆ stellt nichtlineare S–Box von AES dar
ˆ jedes Byte des Zustands wird zunächst ersetzt durch seine multiplikative
Inverse in GF(28) modulo des irreduziblen Polynoms m(x) := x8 + x4 +
x3 + x + 1 (hex.: 11Bh), wobei als Inverse von 00h wieder 00h genommen
wird
ˆ die resultierenden Bytes x7 x6 · · · x0 werden anschließend noch der folgen-
den affinen Transformation unterworfen:
for i:=0 to 7 do
yi := (xi + xi+4 + xi+5 + xi+6 + xi+7 + ci ) mod 2;
dabei werden die Indexoperationen modulo 8 ausgeführt, und es wird
c7 c6 · · · c0 := 01100011 gesetzt
ˆ das Ergebnis dieser beiden hintereinander ausgeführten Transformationen
ist in einer Tabelle abgelegt
ˆ Beispiel: aus dem Byte ABh wird so das Byte 62h
ˆ die Umkehrung von ByteSub erfolgt durch Anwendung der inversen affinen
Transformation gefolgt von der Berechnung der multiplikativen Inversen in
GF(28)
ShiftRow–Transformation:
ˆ die einzelnen Zustände S0 , S1 , · · · werden byteweise jeweils in einer Matrix
abgelegt:








a00
a10
a20
a30
a01
a11
a21
a31
a02
a12
a22
a32
a03
a13
a23
a33








ˆ die Zeilen 1 bis 3 werden dann zyklisch nach rechts verschoben, Zeile 0
wird nicht geändert; dabei wird Zeile i (1 ≤ i ≤ 3) um ci Bytes abhängig
von der Blockgröße b verschoben:
c1
c2
c3
b=128 b=192 b=256
1
1
1
2
2
3
3
3
4
ˆ zum Dechiffrieren erhält man die inverse Transformation durch Ausführen
der entsprechenden zyklischen Verschiebungen nach links
78
MixColumn–Transformation:
ˆ jede Spalte








a0i
a1i
a2i
a3i








der jeweiligen Zustandsmatrix wird anhand der Matrixmultiplikation








02
01
01
03
03
02
01
01
01
03
02
01
01
01
03
02









∗







a0i
a1i
a2i
a3i








verändert; dabei sind die Matrixelemente Bytes in hexadezimaler Notation
ˆ bei der Multiplikation werden die Bytes der Matrix und die Bytes des
Zustandsvektors als Elemente von GF(28) aufgefasst und nach den dort
geltenden Regeln verknüpft
ˆ andere Interpretation dieser Multiplikation:
jede Spalte der Matrix und auch die Spalte der Zustandsmatrix können je
als Polynome vom Grad ≤ 3 mit Bytes als Koeffizienten aufgefasst werden,
z.B. steht dann AB 00 D2 3F h für das Polynom ABx3 + D2x + 3F mit
hexadezimalen Koeffizienten; damit sind die Koeffizienten dieses Polynoms
selbst Polynome, nämlich Elemente aus GF(28); Addition und Multiplikation erfolgen entsprechend, wobei bei der Multiplikation ein Polynom vom
Grad ≤ 6 entsteht; dieses wird sofort modulo x4 + 1 reduziert; man kann
zeigen, dass die Multiplikation
(a3 x3 + a2 x2 + a1 x1 + a0 ) ∗ (b3x3 + b2 x2 + b1x1 + b0) mod (x4 + 1)
= (c3x3 + c2 x2 + c1 x1 + c0 ) auch ausgeführt werden kann als Matrixmultiplikation

 



b
a
a
a
a
c
3
2
1   0 
 0
 0 





  b1 
 a
 c1 
a0 a3 a2 

∗
 = 1


 



 a2 a1 a0 a3   b2 
 c2 

 



b3
a3 a2 a1 a0
c3
wobei die einzelnen Additionen und Multiplikationen wie in GF(28) ausgeführt werden
ˆ auch die MixColumn–Transformation ist invertierbar
79
Einige weitere oft verwendete symmetrische kryptographische Algorithmen
Triple–DES
Der DES–Algorithmus wird dreimal hintereinander mit zwei verschiedenen
Schlüsseln angewendet, und zwar nach dem Schema
C := Ek1 (Dk2 (Ek1 (P ))).
Der Schlüsselraum hat damit die Größe 2112.
(Dagegen wäre ein zweifaches DES nach dem Schema C := Ek2 (Ek1 (P )) nicht resistent gegenüber einem known–plaintext–Angriff: Berechne nur für alle Schlüssel k1 die Zwischenwerte Ek1 (P ) und für alle Schlüssel k2 die Werte Dk2 (C)
und vergleiche die Ergebnisse. Sind sie gleich, so ist ein Schlüsselpaar gefunden.
Dieser Angriff kostet nur doppelt so viel Zeit wie bei DES.)
Triple–DES wird gegenwärtig z.B. von US–amerikanischen Finanzbehörden verwendet.
RC2, RC4, RC5, RC6
”Rivest’s Code”; Ron Rivest; geschütztes Eigentum der Fa. RSA Data Security,
die auch Programme vertreibt, die diese Algorithmen benutzen; Schlüssellänge
von 1 bis 1024 Bit; RC2 ist blockorientiert ähnlich DES, während RC4 stromorientiert ist (s. Folie 56). RC5 und RC6 erlauben verschiedene Blockgrößen,
Rundenanzahlen und Schlüssellängen.
Blowfish (”Kugelfisch”) und Twofish
Beide Algorithmen stammen (im Wesentlichen) von Bruce Schneier. Es sind
Feistel–Chiffren mit 64– bzw. 128–Bit Blocklängen und 16 Runden. Blowfish
ist sehr weit verbreitet und wird zu Dateiverschlüsselungen und in e–mail–
Verschlüsselungsprogrammen eingesetzt. Twofish ist im AES–Wettbewerb nur
knapp unterlegen gewesen und kann auch als Alternative zu AES verwendet
werden. Es werden in Twofish auch Multiplikationen im Körper GF (28) verwendet.
Serpent (Ross Anderson, Eli Biham und Lars Knudsen)
Nahm auch am AES–Wettbewerb teil und kam neben Rijndael und Twofish
unter die besten drei Algorithmen. Es ist eine SP–Chiffre (in jeder Runde werden eine Substitition und eine Permutation durchgeführt, die durch Substitutionsboxen bzw. lineare Transformationen, angewendet auf Teilblöcke, realisiert
werden) mit 32 Runden. Serpent gilt als sehr sicher, ist jedoch im Vergleich zu
Rijndael und Twofish langsamer.
80
RSA–Verfahren
p, q große Primzahlen mit p 6= q, n := p ∗ q
e Zufallszahl mit 1 < e < n und gcd(e, ϕ(n)) = 1
d modulare Inverse von e modulo ϕ(n), d.h., e ∗ d = 1 mod ϕ(n)
P := Zn
C := Zn
K := {(n, p, q, e, d) | p, q, n, e, d wie oben}
(n, e öffentlich, p, q, d, ϕ(n) geheim)
für jedes k = (n, p, q, e, d) ∈ K sei
Ek (x) := xe mod n (Verschlüsselung)
Dk (y) := y d mod n (Entschlüsselung)
Bemerkungen:
ˆ s. auch den Artikel Kaliski.pdf von Burt Kaliski, chief scientist von RSA–
Laboratories (Laufwerk N)
ˆ weit verbreitet: PGP, SSL und damit Bestandteil von Webbrowsern, SSH,
S/MIME (s. auch die entsprechenden RFC’s, einige davon in Laufwerk N)
ˆ der Klartext muss ggf. so in Blöcke unterteilt werden, dass deren zahlen-
mäßige Darstellung kleiner als n ist
ˆ kann als Blockchiffre nur im ECB– und im CBC–Modus implementiert
werden
ˆ ist wesentlich langsamer als beispielsweise DES, IDEA oder AES und sollte
daher nur auf relativ kurze Klartexte oder zur Verschlüsselung von Schlüsseln symmetrischer Verfahren verwendet werden; auch zur Verschlüsselung
von Hash–Werten umfangreicher Klartexte sehr gut geeignet
ˆ oft benutzte e’s, damit Chiffrierung schnell geht:
e = 3 oder e = 5
e = 216 + 1 = 65537 (Potenzierung schnell mit Hilfe von
square and multiply ausführbar)
(weder p − 1 noch q − 1 dürfen durch e teilbar sein)
81
ˆ p und q sollten je mind. 1024 Bit Länge haben, damit Chiffrierung für die
ca. nächsten 20 Jahre sicher ist (noch besser: je 2048 Bit); außerdem sollten
sie starke Primzahlen sein
ˆ wenn man RSA auch zur Erzeugung einer digitalen Unterschrift benutzt
(s. unten) und dabei dasselbe n verwenden möchte, so sollten p − 1 und
q − 1 beide weder durch 3 noch durch 5 teilbar sein; dann können aus
Aufwandsgründen zum Verschlüsseln e = 5 als öffentlicher Exponent und
zum Verifizieren der digitalen Unterschrift e = 3 als öffentlicher Exponent
verwendet werden (für beide Zwecke denselben öffentlichen Exponenten zu
verwenden ist angreifbar)
ˆ wenn auch nur eine einzige der 4 Komponenten des geheimen Schlüssels
bekannt wird, ist die Chiffre wertlos, da dann der Exponent d für das
Entschlüsseln (bzw. für das Erzeugen der digitalen Unterschrift) leicht berechnet werden kann
ˆ die Sicherheit von RSA basiert auf einer Einweg–Falltür–Funktion (one–
way trapdoor function): es ist einfach, xe mod n zu berechnen, aber ohne
Kenntnis von p, q oder ϕ(n) (jede dieser Größen hat die Funktion einer
Falltür) und natürlich auch von d kann x nicht wieder erhalten werden
ˆ wenn x so klein ist, dass xe < n ist, also dass bei der Berechnung des
Ciphertextes keine modularen Reduktionen auftreten, so kann x bereits
durch Berechnen der gewöhnlichen e–ten Wurzel wieder bestimmt werden;
um dies zu verhindern und weitere mögliche Angriffe zu erschweren, sind
Standards zur Implementierung von RSA eingeführt worden, z. B. PKCS
#1
ˆ eine besonders empfehlenswerte Variante der Implementierung (s. auch Fer-
guson/Schneier: Practical Cryptography):
– Alice wählt eine genügend große Zufallszahl r ∈ Zn
– sie berechnet dann z := re mod n und K := h(r) mit einer bestimmten
kryptographischen Hashfunktion h
– sie verschlüsselt den Klartext x mit einer symmetrischen Chiffre mittels
des Schlüssels K, also y := EK (x), und sendet sowohl z als auch y an
Bob
– Bob berechnet r mit seinem privaten Schlüssel d, dann K und schließlich x = DK (y)
82
einfache Faktorisierungsalgorithmen
√
bekannt: Genau dann, wenn keine Primzahl p mit p ≤ n ein Teiler von n ist,
ist n Primzahl, besitzt also keine nichttrivialen Teiler. Die Umsetzung dieses
Sachverhaltes führt aber bei großen n zu einem nicht akzeptierbaren Rechenaufwand.
ein trial–and–error–Verfahren:
Wenn x 6= y und x2 = y 2 mod n ist, so ist (x2 −y 2 ) = (x−y)∗(x+y) = 0 mod n,
so dass x2 − y 2 durch n teilbar ist. Überprüfe nun, ob gcd(x − y, n) oder
gcd(x + y, n) verschieden von 1 und von n ist. Falls ja (was in ca. 50% der
Fälle auftritt), so ist ein nichttrivialer Teiler von n gefunden.
Beispiel: n := 25651; wähle eine Zufallszahl z zwischen 1 und n, etwa z := 283;
dann gilt:
2832 mod n = 3136 = 26 ∗ 72 = (23 ∗ 7)2 mod n = 562 mod n; es ist
gcd(283 − 56, n) = 227, womit ein nichttrivialer Teiler bzw. Faktor von n gefunden ist.
eine andere Variante, Zahlen x 6= y mit x2 = y 2 mod n zu finden:
Wähle drei Zahlen 1 < a, b, c < n derart, dass für a2 mod n, b2 mod n und
c2 mod n leicht deren Primfaktorzerlegung gefunden werden kann und hoffentlich jeder Primfaktor insgesamt geradzahligoft–Mal vorkommt. Dann ist
(a ∗ b ∗ c)2 = (Produkt der Primfaktorzerlegungen)2 mod n.
Beispiel: n := 15770708441, a := 8340934156, b := 12044942944, c :=
2773700011;
dann ist a2 = 3 ∗ 7 mod n, b2 = 2 ∗ 7 ∗ 13 mod n und c2 = 2 ∗ 3 ∗ 13 mod n,
so dass ((a ∗ b ∗ c) mod n)2 = ((2 ∗ 3 ∗ 7 ∗ 13) mod n)2 mod n, also 95034357852 =
5462 mod n ist;
wegen gcd(9503435785 − 546, n) = 115759 ist mit 115759 ein Teiler von n gefunden.
83
Pollard’s ρ–Faktorisierungsalgorithmus
gegeben: eine natürliche Zahl n, die keine Primzahlpotenz ist;
gesucht: ein nichttrivialer Faktor d von n
a := random(n); b := random(n);
for i := 1, 2, · · · do
begin
a := a2 + 1 mod n;
b := b2 + 1 mod n;
b := b2 + 1 mod n;
d := gcd(a − b, n);
if 1 < d < n then return(d);
if d = n then exit; {kein Faktor gefunden}
end
weitere Faktorisierungsalgorithmen:
Pollard’s (p-1)–Algorithmus, quadratisches–Sieb–Algorithmus, Faktorisierung
mit elliptischen Kurven
Die 129-stellige Zahl (RSA–129)
1143 81625 75788 88676 69235 77997 61466 12010 21829 67212 42362
56256 18429 35706 93524 57338 97830 59712 35639 58705 05898 90751
47599 29002 68795 43541
ist das Produkt der beiden Primzahlen
3490 52951 08476 50949 14784 96199 03898 13341 77646 38493 38784
39908 20577
und
32769 13299 32667 09549 96198 81908 34461 41317 76429 67992 94253
97982 88533
Die Faktorisierung wurde 1994 gefunden, nachdem sie 17 Jahre vorher von
RIVEST als Problem formuliert wurde.
RSA–640:
31074182404900437213507500358885679300373460228427275457201619488232
064405180815045563468296717232867824379162728380334154710731085019195
48529007337724822783525742386454014691736602477652346609
wurde am 2. November 2005 faktorisiert; Preisgeld: 20000$
Zu anderen Herausforderungen bzgl. der Faktorisierung großer Zahlen, die mit
hohen Preisgeldern verbunden waren, siehe
http://www.rsasecurity.com/rsalabs/challenges/ (wird nicht mehr weiter
betrieben).
84
Erzeugung eines primitiven Elementes von Z∗p
Es sei p eine Primzahl. Dann gilt (z. T. schon bekannt aufgrund der Folien zu
den zahlentheoretischen Grundbegriffen):
1. α ist ein primitives Element von Z∗p
Z∗p = {αi mod p | 0 ≤ i ≤ p − 2}
⇐⇒
2. Z∗p hat genau ϕ(p − 1) primitive Elemente
(ist n = pe11 ∗ pe22 ∗ · · · ∗ pekk die Primfaktorzerlegung von n, so ist ϕ(n) =
n ∗ (1 − p11 ) ∗ (1 − p12 ) ∗ · · · ∗ (1 − p1k ))
3. sei α ein primitives Element von Z∗p und β = αi mod p; dann gilt:
β ist ein primitives Element von Z∗p ⇐⇒
gcd(i, p − 1) = 1
4. α ∈ Z∗p ist primitives Element ⇐⇒
α(p−1)/q 6= 1 mod p für jeden Primteiler q von p − 1
Damit kann ein primitives Element α ∈ Z∗p aufgrund von 4. wie folgt berechnet
werden, falls p − 1 = pe11 ∗ pe22 ∗ · · · ∗ pekk mit paarweise verschiedenen Primzahlen
p1 , p2, · · · , pk ist:
1. wähle eine Zufallszahl α ∈ Z∗p
2. for i := 1 to k do
begin β := α(p−1)/pi mod p;
if β = 1 then goto 1.
end
3. return(α)
Konstruiere also p möglichst so, dass die Primteiler von p − 1 von vornherein
bekannt sind (s. z.B. log stream.ari).
85
ElGamal–Verfahren
p große Primzahl, so dass das diskrete Log.–Problem in Z∗p praktisch unlösbar
ist (z.B. sollte (p − 1)/2 selbst Primzahl sein oder zumindest einen großen Primfaktor besitzen)
α ∈ Z∗p primitives Element
1≤a≤p−2
P := Z∗p
C := Z∗p × Z∗p
K := {(p, α, a, β) | β := αa mod p},
wobei p, α, β öffentlich, a geheim
für k = (p, α, a, β) und eine Zufallszahl λ, 1 ≤ λ ≤ p − 2 und x ∈ P sei
Ek (x) := (y1, y2 )
mit y1 := αλ mod p, y2 := x ∗ β λ mod p
für (y1, y2) ∈ Z∗p × Z∗p sei
Dk (y1, y2) := y2 ∗ (y1a )−1 mod p
86
Bemerkungen
ˆ Bestandteil beispielsweise von GnuPG
ˆ Klartext vor der Verschlüsselung in Blöcke zerlegen, deren zahlenmäßige
Darstellung ≤ p-1 ist (falls p z.B. L Bit hat, so könnten die Klartextblöcke
je L-1 Bit haben)
ˆ λ sollte geheim bleiben, kann auch sofort nach Benutzung bei der Ver-
schlüsselung wieder vergessen werden
ˆ Patent auf ElGamal und Diffie–Hellman (s.u.) lief am 29.4.1997 aus
ˆ der Ciphertext ist doppelt so lang wie der Klartext
ˆ für längere Zeit andauernde Sicherheit sollte p mindestens 1024 Bit lang
sein
ˆ sollte nur zum Chiffrieren kurzer Nachrichten (z.B. von Schlüsseln) ver-
wendet werden
ˆ Achtung! Wenn man den diskreten Logarithmus bzgl. irgendeines primiti-
ven Elementes α ∈ Z∗p als Basis berechnen kann, so auch bzgl. jedes anderen
primitiven Elementes aus Z∗p
87
Die Potenzen 3i mod 17 für 0 ≤ i ≤ 16:
3 i mod 17
16
*
*
*
*
*
11
*
*
*
*
*
6
*
*
*
*
*
1*
*
1
6
11
16
i
Die Logarithmen log3 (i) mod 17 für 1 ≤ i ≤ 16:
log 3 (i) mod 17
16
*
*
*
*
11
*
*
*
*
*
6
*
*
*
*
*
1
*
*
1
6
11
88
16
i
baby–step–giant–step–Algorithmus zur Berechnung des diskreten Logarithmus modulo einer Primzahl p
gegeben: eine Primzahl p, ein primitives Element a ∈ Z∗p sowie ein b ∈ Z∗p
gesucht: dasjenige x mit 0 ≤ x ≤ p − 2 und ax = b mod p
Algorithmus:
√
m := ⌈ p − 1⌉;
{m2 ≥ p − 1}
berechne zweispaltige Tabelle mit den Einträgen (j, aj mod p) für 0 ≤ j < m;
sortiere diese Tabelle monoton wachsend nach den zweiten Einträgen;
c := b; d := a−m mod p;
for i := 0 to m − 1 do
begin if (c = aj mod p) {binäre Suche in der 2. Spalte}
then return(x := i ∗ m + j);
c := c ∗ d mod p;
end;
Begründung:
x ist eine der Zahlen 0, 1, · · · , p − 2 (oder 1, 2, · · · , p − 1, denn a0 = ap−1 =
1 mod p);
da i und j unabhängig voneinander alle natürlichen Zahlen von 0 bis m − 1
durchlaufen, gilt
0 ≤ i ∗ m + j ≤ (m − 1) ∗ m + (m − 1) = m2 − m + m − 1 = m2 − 1;
da weiterhin p − 1 ≤ m2 ist, also p − 2 ≤ m2 − 1, durchlaufen die Zahlen i ∗ m+j
auf jeden Fall alle Werte von 0 bis p − 2.
c durchläuft die Werte b, b ∗ a−m , b ∗ a−2m , · · · , b ∗ a−(m−1)m ;
falls dann b ∗ a−im = aj mod p ist (0 ≤ i, j ≤ m − 1), so ist ai∗m+j = b.
89
Kryptographie auf elliptischen Kurven
Hier wird die praktische Unlösbarkeit des diskreten–Logarithmus–Problems in
der (additiven) Gruppe der Punkte auf einer elliptischen Kurve (elliptic curve
discrete logarithm problem (ECDLP)) zugrundegelegt.
ECDLP:
Gegeben seien eine elliptische Kurve E über einem endlichen Körper F , ein
Punkt P ∈ E(F ) und ein Punkt Q ∈< P > (< P >: die durch P erzeugte
zyklische Untergruppe der Gruppe aller Kurvenpunkte).
Gesucht ist die kleinste natürliche Zahl n, so dass Q = (P + P + · · · + P ) (n
Summanden P ) bzw. Q = n ∗ P ist. Diese Zahl n heißt der diskrete Logarithmus
von Q zur Basis P (modulo (E,F)) und wird mit logP Q mod (E, F ) bezeichnet.
Beispiel (siehe das Buch von Hankerson/Menezes/Vanstone, S. 13):
Es sei F7 := (Z7 , +, ∗), wobei die arithmetischen Operationen natürlich modulo
7 auszuführen sind. Die die elliptische Kurve E definierende Gleichung sei
y 2 = x3 + 2 ∗ x + 4
so dass E aus genau folgenden Punkten besteht:
E = {(x, y) ∈ Z7 × Z7 | y 2 = x3 + 2 ∗ x + 4 mod 7} ∪ {∞}
(der ”unendlich ferne Punkt” ∞ wird stets zu den ”eigentlichen”Kurvenpunkten
hinzugenommen und spielt die Rolle des neutralen Elementes der additiven
Gruppe der Kurvenpunkte; es ist der einzige Punkt im Unendlichen, der die
projektive Form der Kurvengleichung erfüllt). Es ergibt sich, dass
E = {∞, (0, 2), (0, 5), (1, 0), (2, 3), (2, 4), (3, 3), (3, 4), (6, 1), (6, 6)}
ist.
Die Kurve als reelle Kurve über dem Intervall [-1.5,2.5]:
5
4
3
2
1
0
−1
−2
−3
−4
−5
−1.5
−1
−0.5
0
0.5
90
1
1.5
2
2.5
Die Kurve über dem Körper F7 :
6
2
1
1
2
6
Definition einer Addition für Punkte der obigen Kurve:
1. Nullelement: P + ∞ := ∞ + P := P für alle P ∈ E
2. inverses Element: ist P = (x, y), so sei −P := (x, −y); außerdem sei −∞ :=
∞
3. Addition: Seien P, Q ∈ E mit P := (x1, y1), Q := (x2, y2) und P 6= Q,
P 6= −Q. Dann sei P + Q = (x3, y3 ) mit
x3 := (
y2 − y1
y2 − y1 2
) − x1 − x2 und y3 := (
)(x1 − x3) − y1
x2 − x1
x2 − x1
4. Punktdopplung: Es sei P ∈ E mit P := (x1, y1) und P 6= −P . Dann sei
2P = (x3, y3), wobei
x3 := (
3x21 + 2 2
3x2 + 2
) − 2x1 und y3 := ( 1
)(x1 − x3) − y1
2y1
2y1
Zum Beispiel findet man in fips186-2.pdf die folgende elliptische Kurve P − 256,
definiert durch y 2 = x3 − 3x + b mod p mit
p = 115 79208 92103 56248 76269 74469 49407 57353 00861 43415 29031 41955
33631 30886 70978 53951 = 2256 − 2224 + 2192 + 296 − 1,
b = 5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e
27d2604b (hexadezimal),
Basispunkt P = (x, y):
x = 6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945
d898c296 und
y = 4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5
Ordnung n des Basispunktes:
n = 115 79208 92103 56248 76269 74469 49407 57352 99969 55224 13576 03424
22259 06106 85120 44369,
91
elliptische–Kurve diskretes–Logarithmus–Problem über Fp
Vorgegeben seien eine (große) Primzahl p, eine elliptische Kurve E über dem
Körper Fp und ein Basispunkt P ∈ E mit Primzahlordnung n, so dass die
durch P erzeugte zyklische Untergruppe < P > von E(Fp) genau die paarweise
verschiedenen Elemente ∞, P, 2P, · · · , (n − 1)P hat. Die Parameter p, P, n und
die Gleichung der elliptische Kurve E sind alle öffentlich.
Als privater Schlüssel d wird eine nat. Zahl aus dem Intervall [1, n − 1] zufällig
ausgewählt. Dann wird der Kurvenpunkt Q := dP berechnet, wobei Q der öffentliche Schlüssel ist.
ECDLP: Bestimme d bei gegebenem Q (wobei auch die übrigen öffentlichen
Parameter bekannt sind).
ElGamal–Verschlüsselung auf elliptischen Kurven:
p große Primzahl, E, P, n wie oben
P := E (Klartexte müssen also durch Punkte in E dargestellt werden)
C := E × E
K := {(Q, d) | Q := d ∗ P },
wobei Q öffentlich, d geheim
für k = (Q, d), eine Zufallszahl λ, 1 ≤ λ ≤ n − 1 und x ∈ P sei
Ek (x) := (y1, y2 ) (Verschlüsselung)
mit y1 := λ ∗ P , y2 := x + λ ∗ Q
für (y1, y2) ∈ E × E sei
Dk (y1, y2) := y2 − d ∗ y1 (Entschlüsselung)
Auch für andere Verfahren der public–key–Kryptographie, deren Sicherheit
auf der praktischen Unlösbarkeit des diskreten–Logarithmus–Problems beruht
(DSA, DH (s. u.)), gibt es analoge Verfahren auf der Basis elliptischer Kurven.
Neben den Körpern GF (p) = Fp (p: Primzahl > 2) gibt es auch die endlichen Körper GF (2m ) = F2m der binären m–Tupel modulo eines irreduziblen
binären Polynoms vom Grad m (siehe die ByteSub–Transformation von AES),
die zusammen mit entsprechenden Polynomen dritten Grades eine weitere Art
elliptischer Kurven festlegen, für die das EC–diskrete–Logarithmus–Problem
praktisch unlösbar ist.
92
Diffie–Hellman–Schlüsselvereinbarung
1. Alice und Bob vereinbaren eine Primzahl p sowie ein primitives Element α
von Z∗p ;
p und α sind öffentlich (das diskrete–Logarithmus–Problem sollte modulo
p schwer zu lösen sein, beispielsweise sollte auch (p − 1)/2 eine Primzahl
sein)
2. Alice: wählt zufällig ein a, 0 ≤ a ≤ p − 2, berechnet αa mod p und sendet
diese Zahl an Bob (a ist geheim)
3. Bob: wählt zufällig ein b, 0 ≤ b ≤ p − 2, berechnet αb mod p und sendet
diese Zahl an Alice (b ist geheim)
4. Alice: berechnet (αb)a mod p
5. Bob: berechnet (αa)b mod p
Damit haben Alice und Bob beide den gleichen Schlüssel (αb )a mod p
(= (αa )b mod p).
ˆ es sollte p = 2∗q +1 sein für eine Primzahl q; dann hat Z∗p nur die folgenden
Untergruppen: die triviale Untergruppe, die nur die Zahl 1 enthält, die
Untergruppe der Ordnung 2, bestehend aus 1 und p-1, die Untergruppe der
Ordnung q (diese enthält genau die Quadrate modulo p) sowie die gesamte
Gruppe selbst; ob eine Zahl aus Z∗p ein Quadrat modulo p ist oder nicht,
kann effizient mit Hilfe des Legendre–Symbols (s.u.) festgestellt werden;
(wenn a gerade und α ein primitives Element und somit kein Quadrat
modulo p ist, so ist αa mod p ein Quadrat modulo p, so dass Mallory in
diesem Fall zwar das letzte Bit von a, aber nicht das gesamte a bestimmen
kann)
ˆ Empfehlungen zur Größe von p: 2048 Bits, um bis ca. 2022 sicher zu sein,
4096 Bits, um bis ca. 2050 sicher zu sein (s. Lenstra/Verheul, Selecting
Cryptographic Key Sizes. J. Cryptology 14(4), 255–293 (2001))
ˆ man–in–the–middle–Angriff ist möglich, deshalb gegenseitige Authentifi-
zierung empfehlenswert
ˆ auch wenn αa mod p bzw. αb mod p von Mallory abgehört werden, so kann
dieser daraus weder a noch b und somit auch nicht den vereinbarten Schlüssel erzeugen
93
modulare Quadratwurzeln und quadratische Reste
Es sei n ∈ N und a, b ∈ Z∗n ; dann heißt b eine Quadratwurzel von a modulo n
√
(b = a mod n) :←→ b2 = b ∗ b = a mod n;
a heißt quadratischer Rest modulo n
a mod n
:←→
es gibt ein c ∈ Z∗n mit c2 =
√
Berechnung von y mod n, falls y ein quadratischer Rest modulo n
ist und falls n = p ∗ q für zwei verschiedene Primzahlen p, q mit p, q =
3 mod 4 ist:
ˆ berechne mit dem erweiterten Euklidischen Algorithmus zwei ganze Zahlen
a, b mit a ∗ p + b ∗ q = 1
(dann ist a = p−1 mod q und b = q −1 mod p)
ˆ r := y (p+1)/4 mod p
ˆ s := y (q+1)/4 mod q
ˆ t := (a ∗ p ∗ s + b ∗ q ∗ r) mod n
ˆ u := (a ∗ p ∗ s − b ∗ q ∗ r) mod n
ˆ die 4 Wurzeln von y mod n sind dann t mod n, n − t mod n, u mod n und
n − u mod n
(Ohne Kenntnis von p und q ist das Berechnen von
wie das Faktorisieren von n.)
√
y mod n genau so schwierig
Bei obiger Wurzelberechnung wurde der Chinesische Restsatz benutzt.
94
Legendre–Symbol
(Adrien Marie Legendre, 1752–1833)
Seien p eine ungerade Primzahl und a eine ganze Zahl;
dann ist das Legendre–Symbol ( ap ) von a bzgl. p definiert durch





a
( ) := 

p


0 , falls p | a
1 , falls a ein quadratischer Rest mod p und ¬(p | a)
−1 , falls a kein quadratischer Rest mod p und ¬(p | a)
Eigenschaften:
ˆ ( ap ) = a(p−1)/2 mod p
a
b
ˆ ( a∗b
p ) = (p) ∗ (p)
ˆ a = b mod p
=⇒
( ap ) = ( pb )
ˆ ( pq ) ∗ ( pq ) = (−1)(p−1)∗(q−1)/4 (p, q ungerade Primzahlen, p 6= q)
(Quadratisches Reziprozitätsgesetz, erstmals von C. F. Gauß bewiesen)
95
Jacobi–Symbol
(Carl Gustav Jacob Jacobi, 1804–1851)
(Verallgemeinerung des Legendre–Symbols)
Sei n ∈ N und n ≥ 3 ungerade mit Primfaktorzerlegung n = pe11 ∗ · · · ∗ pekk und
sei a ∈ Z; dann ist das Jacobi–Symbol ( na ) von a bzgl. n definiert durch
a
a
a
( ) := ( )e1 ∗ · · · ∗ ( )ek
n
p1
pk
(rechts stehen Potenzen von Legendre-Symbolen)
Eigenschaften:
ˆ n Primzahl =⇒ Jacobi–Symbol = Legendre–Symbol
ˆ ( na ) = 0, 1 oder -1
ˆ ( na ) = 0
⇐⇒
gcd(a, n) 6= 1
2
) = ( na ) ∗ ( nb ) (damit: a ∈ Z∗n ⇒ ( an ) = 1)
ˆ ( a∗b
n
a
ˆ ( m∗n
) = ( ma ) ∗ ( na )
ˆ a = b mod n
ˆ ( n2 ) = (−1)(n
ˆ a = 2e ∗ a1
e
=⇒
2
( na ) = ( nb )
−1)/8
∧
a1 ungerade
=⇒
a1
( na ) = ( 2n ) ∗ ( an1 ) = ( n2 )e ∗ ( n mod
) ∗ (−1)(a1−1)(n−1)/4
a1
96
Benutzung der beiden zuletzt genannten Eigenschaften, um den Wert des
Jacobi–Symbols rekursiv zu berechnen
Jacobi(a,n):
input: ungerade natürliche Zahl n ≥ 3, natürliche Zahl a, 0 ≤ a < n
output: Jacobi–Symbol ( na ) (bzw. Legendre–Symbol, falls n Primzahl)
ˆ if a = 0 then return(0);
ˆ if a = 1 then return(1);
ˆ bestimme e und a1 , so dass a = 2e ∗ a1 und a1 ungerade;
2
ˆ if a1 = 1 then return((−1)e∗(n −1)/8 );
ˆ if e gerade then
s := 1
else
if (n = 1 mod 8 or n = 7 mod 8) then
s := 1
else /* n = 3 mod 8 oder n = 5 mod 8 */
s := −1
ˆ if (n = 3 mod 4 and a1 = 3 mod 4) then s := −s;
ˆ n1 := n mod a1
ˆ return(s∗ Jacobi(a1, n1 ))
97
Rabin–Verfahren für spezielle Primzahlen p, q
p 6= q Primzahlen, p, q = 3 mod 4, n := p ∗ q
(n: öffentlich, p, q: geheim)
P := Zn
C := {y ∈ Zn | y quadratischer Rest modulo n }
K := {(p, q, n)}
EK (x) := x2 mod n
DK (y) :=
√
y mod n
Bemerkungen:
ˆ p und q sollten so groß wie beim RSA–Algorithmus gewählt werden
ˆ Verschlüsselung ist sehr schnell, Entschlüsselung hat ungefähr denselben
Aufwand wie beim RSA–Verfahren
ˆ chosen–ciphertext–Attacke:
man in the middle wählt Zufallszahl m ∈ Zn und berechnet c := m2 mod
n; er sendet c an Bob (der p und q kennt), damit dieser c dechiffriert;
Bob erhält einen Klartext x, den man in the middle abfängt; da Bob den
”wahren Klartext” m nicht kennt, ist x eine der vier möglichen Wurzeln
aus c modulo n; falls dabei x 6= m mod n und x 6= −m mod n ist, so kann
man in the middle mit gcd(m − x, n) einen Primfaktor von n berechnen
ˆ Welche der vier Wurzeln ist der gesuchte Klartext?
oft daran zu erkennen, dass drei der berechneten Wurzeln ”keinen Sinn”
ergeben;
besser: vor der Verschlüsselung bestimmte Merkmale in den Klartext einbauen, etwa die letzten 64 Bit nochmal wiederholen; dann hat zusätzlich
auch eine chosen–ciphertext–Attacke keine Chance auf Erfolg
98
digitale Signaturen (elektronische Unterschriften)
sollen wesentliche Eigenschaften von handschriftlichen Unterschriften haben
ˆ Echtheitseigenschaft
Das Dokument stammt wirklich vom Unterschreibenden (enger Zusammenhang zwischen Dokument und Unterschrift dadurch, dass beide auf
demselben Blatt Papier stehen).
ˆ Identitätseigenschaft
Die Unterschrift ist persönlich, d.h., sie kann jeweils nur von einem einzigen
Menschen ausgestellt werden und ist somit schwierig zu fälschen.
ˆ Abschlusseigenschaft
Sie signalisiert die Vollendung einer Erklärung dadurch, dass sie am Ende
steht.
ˆ Warneigenschft
Warnung des Unterzeichnenden bei handschriftlicher Unterschrift vor
Übereilung.
ˆ Verifikationseigenschaft
Jeder Empfänger einer unterschriebenen Erklärung kann Unterschrift verifizieren durch Vergleich.
Bis auf die Warneigenschaft lassen sich alle Eigenschaften auf kryptographische
Protokolle übertragen.
Da ein digital signiertes Dokument leicht kopiert werden kann, sollte es stets
weitere Informationen wie etwa einen Zeitstempel enthalten.
Oberste Behörde zur Wahrung des Signaturgesetzes, der Signaturverordnung
und zur Spezifizierung von Einsatzbedingungen von Signaturanwendungskomponenten ist die
Bundesnetzagentur
(www.bundesnetzagentur.de).
Die drei eben genannten Dokumente befinden sich als Sign Gesetz.pdf,
Sign Verordnung.pdf und Einsatz Sign.pdf auch im Laufwerk N.
99
allgemeines Signatur–Schema (P, A, K, h)
P := endliche Menge von möglichen Texten (die zu signieren sind)
A := endliche Menge von möglichen Signaturen
K := endliche Menge von möglichen Schlüsseln
(jeder Schlüssel k ∈ K hat einen öffentlichen Teil kpublic und einen geheimen Teil
kprivate )
h: eine kryptographische Hashfunktion;
für jedes k ∈ K, jedes m ∈ P und jedes A ∈ A sei
sigkprivate (h(m)) ∈ A die Signatur von m
verkpublic (h(m), A) ∈ {true, f alse},


wobei verkpublic (x, y) := 
true , falls y = sigkprivate (x)
f alse , falls y =
6 sigkprivate (x)
Ablauf des Protokolls (siehe auch Folie 30):
Alice: signiert den Hashwert h(m) einer Nachricht m an Bob mit ihrem
privaten Schlüssel kprivate und sendet die Nachricht m zusammen mit
der Unterschrift sigkprivate (h(m)) an Bob;
Bob: bildet ebenfalls h(m) und überprüft mit Hilfe des öffentlichen
Schlüssels kpublic von Alice, ob
verkpublic (h(m), sigkprivate (h(m))) = true
ist oder nicht
100
RSA–Signatur–Schema
p, q große Primzahlen mit je mindestens 1024 Bit, p 6= q, n := p ∗ q;
P := Zn
A := Zn
K := {(n, e, d) | 1 < e, d < n
∧
(d, p, q, ϕ(n) geheim, n, e öffentlich)
e ∗ d = 1 mod ϕ(n)}
für jedes k := (n, e, d) ∈ K sei
sigk (x) := xd mod n
verk (x, y) := true :⇐⇒ x = y e mod n
(Genau dann, wenn y = sigk (x) ist, ist verk (x, y) = true.)
Da x ∈ Zn , also x < n, vorausgesetzt ist, erübrigt sich hier die sonst der Signierung vorausgehende Anwendung einer Hash–Funktion h auf eine Nachricht m,
um dadurch x zu erhalten.
In PKCS#1 sind Methoden zur Maskierung des Hash–Wertes vorgeschrieben,
damit folgender Angriff von Mallory unmöglich gemacht wird:
Mallory nimmt den public key e von Alice, eine Nachricht m und
bestimmt x := h(m). Dann versucht er ein y zu finden, so dass
verk (x, y) = true ist. Wenn ihm das gelingt, kann er Bob glaubhaft
machen, dass y die Unterschrift von Alice unter m ist, dass also Alice
die Nachricht unterschrieben hat.
101
Signatur–Schema nach ElGamal
p: große Primzahl, so dass das diskrete Log.–Problem in Z∗p praktisch unlösbar
ist (z.B. sollten (p − 1)/2 selbst Primzahl sein oder zumindest einen großen
Primfaktor besitzen und p möglichst 1024 Bit Länge haben)
α ∈ Z∗p primitives Element
P := Z∗p
A := Z∗p × Zp−1
K := {(p, α, a, β) | β := αa mod p},
wobei p, α, β öffentlich, a geheim
für k := (p, α, a, β) ∈ K und eine geheime Zufallszahl λ ∈ Z∗p−1 sei
sigk (x, λ) := (γ, δ)
mit γ := αλ mod p, δ := (x − a ∗ γ) ∗ λ−1 mod (p − 1);
für x, γ ∈ Z∗p , δ ∈ Zp−1 sei
verk (x, γ, δ) := true
:⇐⇒
β γ ∗ γ δ = αx mod p
102
Digital Signature Standard DSS
(Modifikation des ElGamal–Signaturschemas)
p: mind. 1024–Bit–Primzahl (empfohlen 2001 vom NIST), so dass das diskrete
Log.–Problem in Z∗p praktisch unlösbar ist
q:
160–Bit–Primzahl mit q|(p − 1)
α ∈ Z∗p mit der Ordnung q (dann ist αq = 1 mod p)
P := Z∗q
A := Zq × Z∗q
K := {(p, q, α, a, β) | β := αa mod p},
wobei p, q, α, β öffentlich, a geheim, 0 ≤ a ≤ q − 1
für k := (p, q, α, a, β) ∈ K, x ∈ Z∗q und eine geheime Zufallszahl λ ∈ Z∗q sei
sigk (x, λ) := (γ, δ)
mit γ := (αλ mod p) mod q, δ := (SHA–1(x) + a ∗ γ) ∗ λ−1 mod q
(falls zufällig δ = 0 sein sollte, so muss die Berechnung mit einem neuen λ
wiederholt werden);
für x, δ ∈ Z∗q , γ ∈ Zq sei
e1 :=SHA–1(x) ∗ δ −1 mod q, e2 := γ ∗ δ −1 mod q
verk (x, γ, δ) := true :⇐⇒ (αe1 ∗ β e2 mod p) mod q = γ
Bemerkungen:
(p−1)/q
Ist α0 ein primitives Element von Z∗p , so kann α := α0
mod p gewählt
werden.
Es ist β q = 1 mod p und γ q = 1 mod p.
Signieren mit ElGamal würde auf eine Signatur mit 1024–Bit Länge führen.
Jetzt wird ein 160–Bit–Wert (der z.B. nach vorheriger Anwendung der Hash–
Funktion SHA–1 auf den zu signierenden Text erhalten worden ist) signiert,
und die Signatur ist nur 320 Bit lang.
103
blinde digitale Signaturen
Alice will von Bob ein Dokument m blind signieren lassen (um z.B. Anonymität
des Bezahlens mit Bargeld zu wahren).
Sie verpackt (d.h. verschlüsselt) es, lässt das verpackte Dokument von Bob signieren (Unterschrift auf einen Briefumschlag, in dem sich das Dokument und
Kohlepapier befinden) und packt das Dokument wieder aus (d.h. entschlüsselt
es), und zwar so, dass die Unterschrift erhalten bleibt.
Ein Protokoll, das dieses leistet, bei dem also Signieren und Verschlüsseln vertauschbar sind, ist das folgende:
Zunächst seien (n, e) bzw. d Bob’s öffentlicher bzw. privater RSA–Schlüssel.
Alice kennt den öffentlichen Schlüssel von Bob.
Alice wählt eine Zufallszahl k < n mit gcd(k, n) = 1; sie berechnet
damit t := (m ∗ k e ) mod n (m wird verpackt) und sendet t an Bob;
Bob berechnet mit seinem privaten Schlüssel d den Wert u := td mod
n (er signiert das verpackte m); dann sendet er u zurück an Alice;
Alice bestimmt (u ∗ k −1) mod n und erhält dadurch md mod n, also
das von Bob signierte Dokument m.
Es ist nämlich
(u ∗ k −1 ) mod n = (td ∗ k −1) mod n = ((m ∗ k e )d ∗ k −1) mod n =
(md ∗ k ∗ k −1 ) mod n = md mod n
104
Kryptographische Hash–Funktionen h
Eine beliebig lange Nachricht m wird auf einen Wert h(m) vorgegebener Bitlänge (message digest, finger print) komprimiert.
Forderungen an h:
1. h muss schwach kollisionsfrei bzgl. m sein:
es muss praktisch unmöglich sein, zu einer vorgegebenen Nachricht m eine
Nachricht m′ zu finden, so dass m′ 6= m und h(m) = h(m′ ) ist
2. h muss stark kollisionsfrei (kollisionsfrei schlechthin) sein:
es ist praktisch unmöglich, Nachrichten m 6= m′ zu konstruieren mit
h(m) = h(m′ )
3. h muss eine Einwegfunktion sein:
falls ein z ∈ W b(h) gegeben ist, so ist es praktisch unmöglich, eine Nachricht m zu finden, so dass z = h(m) ist
4. h(m) sollte ”einfach” und ”schnell” berechenbar sein
starke Kollisionsfreiheit: h muss sogar einem Geburtstagsangriff standhalten,
√
also k := 1.17 ∗ n muss genügend groß sein (n: Anzahl der möglichen Funktionswerte von h), weil nach k Versuchen mit der Wahrscheinlichkeit 0.5 mit
einer Kollision zu rechnen ist (es treten mit der Wahrscheinlichkeit 0.5 zwei
Zeichenketten mit gleichem Hashwert auf).
schwache Kollisionsfreiheit: Jetzt ist ein Hashwert y vorgegeben. Damit nun
durch zufälliges Erzeugen von k Zeichenketten m1 , · · · , mk darunter eine solche
ist, die mit mindestens der Wahrscheinlichkeit 0.5 diesen Hashwert hat, muss
k
jetzt 1 − n−1
≥ 0.5 sein.
n
Denn es ist
P (h(m1 ) = y ∨ h(m2 ) = y ∨ · · · ∨ h(mk ) = y)
=
1−(
Für n = 365 heißt dies, dass k ≥ 253 sein muss.
Hash–Funktionen mit Schlüssel (keyed hash functions):
MAC’s (siehe oben)
105
n−1 k
)
n
Merkle’s Methode zur Konstruktion von Hash–Funktionen
Input: kollisionsfreie Kompressionsfunktion f , die (n + r)–Bit–Inputs in n–Bit–
Outputs transformiert
Output: kollisionsfreie Hash–Funktion h, die n–Bit–Hash–Werte erzeugt
1. unterteile einen Input x mit b Bits in Blöcke x1, · · · , xt mit je r Bits Länge,
wobei der letzte Block evtl. mit Nullen aufzufüllen ist
2. hänge einen letzten Block xt+1 an, um die eigentliche Länge b abzuspeichern
(vorausgesetzt, dass b < 2r )
3. sei 0j die Zeichenkette aus j Nullen; berechne
H0 := 0n,
Hi := f (Hi−1kxi) für 1 ≤ i ≤ t + 1
4. setze h(x) := Ht+1 = f (Ht kxt+1)
Verkettung von Hash–Funktionen
Sind h1 und h2 Hash–Funktionen, von denen mindestens eine kollisionsfrei ist,
so ist auch h mit
h(x) := h1 (x)kh2(x)
eine kollisionsfreie Hash–Funktion (die allerdings einen längeren Output erzeugt).
Beispiele von zur Zeit häufig benutzten Hash-Funktionen:
MD5, RIPEMD–128 (beide Funktionen erzeugen Hashwerte mit einer Bitlänge
von 128)
SHA–1, RIPEMD–160 (beide Funktionen erzeugen Hashwerte mit einer Länge
von 160 Bits)
SHA–224, SHA–256, SHA–384, SHA–512 (im Jahr 2000 veröffentlicht [FIPS–
180]; die Zahlen geben die Längen der Hashwerte an)
106
Ein Pseudocode für RIPEMD-160
RIPEMD-160 is an iterative hash function that operates on 32-bit words. The
round function takes as input a 5-word chaining variable and a 16-word message
block and maps this to a new chaining variable. All operations are defined on 32bit words. Padding is identical to that of MD4. First we define all the constants
and functions.
RIPEMD-160: definitions
nonlinear functions at bit level:
f (j, x, y, z) = x ⊕ y ⊕ z
f (j, x, y, z) = (x ∧ y) ∨ (¬x ∧ z)
f (j, x, y, z) = (x ∨ ¬y) ⊕ z
f (j, x, y, z) = (x ∧ z) ∨ (y ∧ ¬z)
f (j, x, y, z) = x ⊕ (y ∨ ¬z)
(0 ≤ j ≤ 15)
(16 ≤ j ≤ 31)
(32 ≤ j ≤ 47)
(48 ≤ j ≤ 63)
(64 ≤ j ≤ 79)
added constants (hexadecimal):
K(j) = 00000000
K(j) = 5A827999
K(j) = 6ED9EBA1
K(j) = 8F 1BBCDC
K(j) = A953F D4E
K ′(j) = 50A28BE6
K ′(j) = 5C4DD124
K ′(j) = 6D703EF 3
K ′(j) = 7A6D76E9
K ′(j) = 00000000
selection of message word:
(0 ≤ j ≤ 15)
(16 ≤ j ≤ 31)
(32 ≤ j ≤ 47)
(48 ≤ j ≤ 63)
(64 ≤ j ≤ 79)
(0 ≤ j ≤ 15)
(16 ≤ j ≤ 31)
(32 ≤ j ≤ 47)
(48 ≤ j ≤ 63)
(64 ≤ j ≤ 79)
√
⌊230 ∗ √2⌋
⌊230 ∗ √3⌋
⌊230 ∗ √5⌋
⌊230 ∗ √7⌋
3
2⌋
⌊230 ∗ √
3
30
⌊2 ∗ √3⌋
3
5⌋
⌊230 ∗ √
3
30
⌊2 ∗ 7⌋
r(j) = j (0 ≤ j ≤ 15)
r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
r′ (0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
r′ (16..31) = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
r′ (32..47) = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
r′ (48..63) = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
r′ (64..79) = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
107
Fortsetzung des Pseudocodes für RIPEMD-160
amount for rotate left (rol):
s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
s′ (0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
s′ (16..31) = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
s′ (32..47) = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
s′ (48..63) = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
s′ (64..79) = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
initial value (hexadecimal):
h0 = 67452301 ; h1 = EF CDAB89 ; h2 = 98BADCF E;
h3 = 10325476 ; h4 = C3D2E1F 0
It is assumed that the message after padding consists of t 16-word blocks that
will be denoted with Xi [j], with 0 ≤ i ≤ t − 1 and 0 ≤ j ≤ 15. The symbol rols
denotes cyclic left shift (rotate) over s positions. The pseudo-code for RIPEMD–
160 is then given below:
RIPEMD–160: pseudo-code
for i := 0 to t - 1 {
A := h0 ; B := h1 ; C := h2 ; D = h3 ; E = h4 ;
A′ := h0 ; B ′ := h1 ; C ′ := h2 ; D′ = h3 ; E ′ = h4 ;
for j := 0 to 79 {
T := rols(j) (A + f (j, B, C, D) + Xi [r(j)] + K(j) mod 232)
+E mod 232;
A := E ; E := D ; D := rol10 (C) ; C := B ; B := T ;
T := rols′ (j) (A′ + f (79 − j, B ′ , C ′, D′ ) + Xi[r′ (j)] + K ′(j) mod 232)
+E ′ mod 232;
A := E ; E := D ; D := rol10 (C) ; C := B ; B := T ; }
T := (h1 + C + D′ ) mod 232 ; h1 := (h2 + D + E ′) mod 232 ;
h2 := (h3 + E + A′ ) mod 232; h3 := (h4 + A + B ′ ) mod 232;
h4 := h0 + B + C ′) mod 232 ; h0 := T ;
}
108
Testwerte für die Hashfunktionen MD5, SHA–1 und RIPEMD–160
Werte der Hash-Funktionen MD5, SHA–1 und RIPEMD–160 für die vier Zeichenketten
””, ”a”, ”abc” und ”abcdefghijklmnopqrstuvwxyz”
in dieser Reihenfolge:
MD5:
d41d8cd98f00b204e9800998ecf8427e
0cc175b9c0f1b6a831c399e269772661
900150983cd24fb0d6963f7d28e17f72
c3fcd3d76192e4007dfb496cca67e13b
SHA–1:
da39a3ee5e6b4b0d3255bfef95601890afd80709
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
a9993e364706816aba3e25717850c26c9cd0d89d
32d10c7b8cf96570ca04ce37f2a19d84240d3a89
RIPEMD–160:
9c1185a5c5e9fc54612808977ee8f548b2258d31
0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
f71c27109c692c1b56bbdceb5b9d2865b3708dbc
1 million times ”a”:
52783243c1697bdbe16d37f97f68f08325dc1528
109
Schlüsselmanagement durch eine öffentliche Datei
Schlüsselmanagement enthält zunächst
ˆ Initialisierung der System–Nutzer
ˆ Erzeugung, Verteilung und Installation des Schlüsselmaterials
ˆ Steuerung der Nutzung des Schlüsselmaterials
ˆ Erneuerung, Widerruf und Zerstörung von Schlüsselmaterial
ˆ Speicherung, Backup und Archvierung von Schlüsselmaterial
öffentliche Datei
B1
priv. Schl. d
1
c := Ee (m)
3
B2
B : e1
1
e3
B2 : e
2
B : e3
3
c
priv. Schl. d2
B3
priv. Schl. d3
m = Dd (c)
3
B1 will an B3 eine verschlüsselte Nachricht senden;
B1 besorgt sich deshalb den öffentlichen Schlüssel e3 von B3 ;
mit Hilfe von e3 wird die Nachricht verschlüsselt und der Ciphertext c an B3
gesandt;
B3 kann mit Hilfe seines privaten Schlüssels d3 den Ciphertext dechiffrieren
110
Schlüsselmanagement mit Zertifizierung der öffentlichen Schlüssel
B1 will an B3 eine Nachricht m senden, und zwar verschlüsselt mit B3 ’s öffentlichem Schlüssel e3 . Dazu lädt B1 sich den öffentlichen Schlüssel von B3 samt
Signatur von einem Key Server und überprüft die Echtheit dieses Schlüssels.
B
1
Verifikation
ver((B , e ) , s )
3 3 3
Verschlüsselung
c := E e (m)
3
öffentliche Datei
B : e , s
1
1 1
e
3
B : e , s
2
2 2
s
3
B : e , s
3
3 3
c
B
3
d
3
m := Dd (c)
3
si : Signatur des öffentlichen Schlüssels ei von Bi, erzeugt mit Hilfe des privaten
Teils des Signaturschlüssels des Servers
ver((Bi, si ), ei): Verifizieren der Echtheit der Signatur si mit Hilfe des öffentlichen Teils des Signaturschlüssels des Servers
Ein Key Server wird manchmal auch, vor allem im Zusammenhang mit Kerberos
(s.u.), als Key Distribution Center (KDC) bezeichnet.
111
Public–Key–Infrastrukturen (PKI)
ˆ Zertifikate (s. Folie 21) werden in der Regel in eine hierarchische Struktur
(PKI) eingebettet.
ˆ Die Wurzelinstanz (root) erzeugt dabei ein spezielles Zertifikat, indem sie
mit ihrem privaten Schlüssel ihren öffentlichen Schlüssel selbst signiert.
Große Zertifizierer, wie z.B. VeriSign, lassen ihre Wurzelzertifikate in Webbrowser und e–mail–clients integrieren.
ˆ Mit dem privaten Schlüssel der Wurzelinstanz werden alle Zertifikate der
zweiten Ebene, der CA’s (Certification Authorities), signiert. Diese wiederum signieren mit ihren privaten Schlüsseln die Zertifikate der Nutzer.
ˆ Eine CA ist für die Feststellung von Identitäten und die Generierung von
digitalen Zertifikaten zuständig.
ˆ Je nach Rang der Identitätsprüfung (von pers. Erscheinen in der Behörde
bis ohne strenge Prüfung der Personalien) bei Vergabe eines Zertifikates
werden diese in Klassen unterteilt. Höchste Klasse: 4.
ˆ Zertifizierungsdiensteanbieter sowie Prüf– und Bestätigungsstellen für Zer-
tifikate findet man unter
www.bundesnetzagentur.de
Die Bundesnetzagentur ist die für elektronische Signaturen zuständige Behörde gemäß Paragraph 3 des Signaturgesetzes (s. auch Folie 99).
112
Kerberos
Gegenseitige Authentifizierung von Alice und Bob und Schlüsselvereinbarung mit Hilfe eines zentralen Servers S ohne Benutzung von public–key–
Kryptographie; ist komplexerer Natur und wird oft im Internet–Bereich angewendet. Der zentrale Server spielt die Rolle einer vertrauenswürdigen dritten
Instanz (Trusted Third Party, TTP). Vorausgesetzt wird dabei, dass A und B
jeweils einen geheimen (symmetrischen) Schlüssel KAS und KBS mit S besitzen.
ˆ A teilt S mit, dass sie vertraulich und authentisch mit B kommunizieren
möchte.
ˆ S antwortet darauf mit einem Datensatz, der mit dem gemeinsamen sym-
metrischen Schlüssel KAS von A und S verschlüsselt ist. Dieser Datensatz
enthält einen Zeitstempel TS , eine Gültigkeitsdauer L, den mit B zu verwendenden Schlüssel KAB , die Bestätigung, dass S den Namen von B richtig
verstanden hat und eine verschlüsselten Datensatz für B.
ˆ A extrahiert den verschlüsselten Datensatz für B und verschlüsselt ihrer-
seits mit dem neuen Schlüssel KAB ihren eigenen Namen und einen Zeitstempel TA und sendet beides an B.
ˆ B entschlüsselt den Datensatz von S und dann mit dem neuen Schlüssel
die Nachricht von A. Er antwortet mit einem leicht geänderten Wert TA +1
von TA an A.
Nach diesen vier Schritten besitzen A und B einen gemeinsamen Schlüssel KAB ,
und sie haben sich gegenseitig durch Austausch der Nachrichten eKAB (A, TA)
und eKAB (TA + 1) authentifiziert.
S
1. A : B
2. e
(T , L, K , B, e
(T , L, K , A))
KAS S
AB
K
S
AB
BS
A
3. e (T , L, K , A), e (A, T )
KBS S
AB
KAB A
4. e (T +1)
K A
AB
113
B
Shared secret keys
Mehrere Parteien teilen sich einen symmetrischen Schlüssel in der Weise, dass
jeweils eine bestimmte Mindest–Anzahl davon, eventuell abhängig von einem
Rang, notwendig ist, damit aus deren Teilschlüsseln der eigentliche Schlüssel
erzeugt werden kann (ein Tresor hat n Schlösser, die alle entsperrt sein müssen,
damit sich der Tresor öffnen lässt).
Beispiele:
ˆ Aus je drei Teilschlüsseln soll der Schlüssel bestimmbar sein:
Es wird ein (geheimes) Polynom y = a ∗ x2 + b ∗ x + s zweiten Grades festgelegt, wobei s, nämlich die y–Koordinate des Schnittpunktes des
Polynoms mit der y–Achse, der Schlüssel ist. Alle Teilschlüsselinhaber bekommen paarweise verschiedene Punkte (xi, yi) des Polynoms zugeordnet.
Da aus drei Punkten das Polynom rekonstruiert werden kann, kann aus je
drei (aber nicht aus weniger) Punkten (den Teilschlüsseln) der Schlüssel s
bestimmt werden.
ˆ Je zwei Direktoren, je drei Vizedirektoren oder je ein Direktor zusammen
mit zwei Vizedirektoren sollen den Schlüssel s erzeugen können:
Es wird eine (geheime) Ebenengleichung a∗x+b∗y +c∗z = 1 festgelegt mit
c 6= 0, so dass die Ebene genau einen Schnittpunkt (0, 0, 1/c) mit der z–
Achse hat. Als Schlüssel wird s := 1/c verwendet. Außerdem wird eine (geheime) Gerade festgelegt, die in der obigen Ebene liegt und die auch durch
den Punkt (0, 0, 1/c) geht. Die Direktoren erhalten als Schlüssel paarweise
verschiedene Punkte auf der Geraden als ihre Teilschlüssel zugewiesen, und
die Vizedirektoren paarweise verschiedene Punkte der Ebene, wobei keiner
dieser Punkte auf der Geraden liegen darf. Außerdem dürfen je drei Vizedirektorenpunkte nicht auf einer Geraden liegen, weil sonst der Schlüssel
nicht berechenbar wäre (oder diese Gerade verläuft durch (0, 0, 1/c)).
114
Einmal–Passworte
OTP (one time password), siehe auch RFC 1760 bzw. RFC 2289;
Anwenden, wenn z. B. Kerberos oder SSH nicht etabliert sind;
zur Erzeugung spielen Einwegfunktionen eine große Rolle
Beispiel: S/Key–Verfahren
Authentifizierungsprogramm, um Password–Sniffer–Angriffe in Client–Server–
artigen kommunizierenden Systemen wirkungslos zu machen.
ˆ Initialisierung
Ausgangspunkt ist geheimes Passwort s, das vorab zwischen Benutzer und
seinem Arbeitsplatzrechner, dem Client, vereinbart wurde. Der Server benötigt s nicht und muss s auch nicht verwalten!
1. Clientrechner berechnet
pi := hashi (s||k) für i = 1, · · · , n
wobei k ein seed ist.
Zur Authentifikation des Clients gegenüber dem Server werden ausschließlich diese Einmal–Passwörter pi verwendet.
2. Client sendet pn zusammen mit k an Server. Das Seed ist eindeutig für
den Benutzer auf dem entsprechenden Server und dient dazu, dass ein
Benutzer das gleiche (geheime) Passwort s für verschiedene Rechner
verwenden kann. (Seed hat ähnliche Bedeutung wie Salt beim Unix–
Login, siehe unten.)
ˆ S/Key–Authentifikation
Nach der i–ten Authentifikation hat der Server für einen Nutzer dessen
Namen zusammen mit dessen pj , j und k gespeichert, wobei j := n − i ist.
Wenn der Client sich erneut authentifizieren will, so folgende Schritte:
1. er sendet seinen Namen an den Server
2. dieser sendet j − 1 und k zurück
3. Client sendet pj−1 an Server; dieser berechnet p′j := hash(pj−1 ) und
überprüft, ob pj = p′j ist; genau dann, wenn das so ist, hat der Client sich authentifiziert, und der Server speichert für eine zukünftige
Authentifizierung dieses Nutzers die Werte pj−1 und j − 1 ab
(Es ist pj = hashj (s||k) = hash(hashj−1 (s||k)) = hash(pj−1 )).)
115
Einmal–Passwörter auf der Basis von Hardware–Tokens
Beispiel: RSA–Secure–ID–Token zur Authentifizierung eines Nutzers gegenüber
einem RSA–ACE–Server (ACE: Access Control and Encryption)
ˆ zwei–Faktor–Authentifizierung mit Hilfe einer PIN und mit Hilfe des To-
kens (also nicht wie eben mit Hilfe eines challenge–response–Protokolls)
ˆ Nutzer besitzt auf Server eine Kennung, die verknüpft ist mit der Serien-
nummer seines Tokens sowie mit einem auf dem Token gespeicherten seed;
dieses seed wird als symmetrischer Schlüssel eingesetzt
ˆ der Server und das Token besitzen eine zeitsynchrone Uhr; das Token er-
zeugt im 30– oder 60–Sekunden–Takt ein neues Passwort, den sogen. Tokencode, der auf dem Display des Tokens angezeigt wird
ˆ dieses Einmal–Passwort wird erzeugt unter Rückgriff auf die Sereinnummer
des Tokens, auf das Seed und auf eine keyed Hash–Funktion (oft AES)
ˆ sowohl Token als auch Server generieren synchron das gleiche Einmal–
Passwort, so dass der Nutzer sich mit seiner Kennung, seiner PIN und
seinem Einmal–Passwort gegenüber dem Server authentifizieren kann
Passwort–Sitter
Java–Applikation bzw. Java–Applet, das ein zum Login notwendiges Passwort
bei Bedarf generiert. Lediglich auf der Client–Seite muss das Applet installiert
werden, und das Passwort wird mittels copy–and–paste in das Anmeldefenster
übertragen. Man benötigt als Nutzer nur ein Master–Passwort, und für jeden
Account kann mit Hilfe eines spezifischen seed dafür ein starkes Passwort deterministisch mit Hilfe von AES erzeugt werden. Das Passwort bleibt jeweils
lediglich 60 Sekunden verfügbar (siehe auch www.passwordsitter.de/).
116
Authentifikation in UNIX
ˆ zugrunde liegen ein benutzergewähltes Passwort und ein Salt
ˆ das Salt ist eine 12–Bit–Zahl, die Werte von 0 bis 4095 annehmen kann; es
wird spezifisch für jeden Nutzer beim erstmaligen Einrichten der Kennung
bzw. bei jedem Passwortwechsel unter Einbeziehung der aktuellen Uhrzeit
und der Prozessidentifikation von der Datei /bin/passwd erzeugt und nutzerspezifisch als Klartext durch zwei Zeichen in /etc/passwd eingetragen
ˆ mit dem Passwort wird (natürlich auch mit dem jeweiligen Nutzer ver-
knüpft) mit Hilfe von crypt(3), einer Variante des DES–Algorithmus, ein
64–Bit–Block aus lauter Nullen mehrfach iteriert verschlüsselt; die 64–Bit–
Ausgabe wird anschließend in 11 Zeichen transformiert und nutzerspezifisch auch in /etc/passwd eingetragen (das Passwort wird also nicht im
Klartext abgespeichert)
ˆ das Salt beeinflusst die Verschlüsselung, in dem eine von 4096 verschiede-
nen Verschlüsselungsvarianten ausgewählt wird; diese Varianten ergeben
sich durch Veränderungen der Expansionsabbildung E des DES (E erweitert einen 32–Bit Block auf einen 48–Bit Block, siehe Folie 67 und folgende);
hat ein Nutzer das gleiche Passwort auf verschiedenen Unix–Systemen, so
werden aufgrund unterschiedlicher Salts unterschiedliche Hashwerte in den
/etc/passwd–Dateien stehen; das Salt erschwert auch einen Angriff mit
gewählten Klartexten
ˆ Authentifikation:
der Nutzer gibt seine Kennung und sein Passwort ein; aus der Datei
/etc/passwd wird sein Salt ausgelesen, und damit und mit seinem Passwort
wie oben beschrieben der 64–Nullen–Block iteriert verschlüsselt; stimmt
das Ergebnis mit dem entsprechenden Eintrag in /etc/passwd überein, so
hat sich der Nutzer authentifiziert
117
Fiat–Shamir–Protokoll
Alice wählt zwei Primzahlen p 6= q und bildet n := p ∗ q (n ist öffentlich, p, q
sind geheim).
Alice wählt weiterhin eine nat. Zahl s ∈ Z∗n (die ihr ”individuelles” Geheimnis
bleibt) und berechnet v := s2 mod n.
v ist öffentlich und kann zum Verifizieren dafür benutzt werden, dass Alice das
Geheimnis s kennt.
(Es können auch von einem Trust–Center Werte s und v für jeden Teilnehmer
berechnet werden.)
Alice kann jetzt auf folgende Weise Bob davon überzeugen, dass sie das
Geheimnis s kennt, ohne dass sie dieses irgendjemandem verrät und ohne dass
jemand aus ihrem Verhalten das Geheimnis rekonstruieren kann (Beispiel für
ein zero–knowledge–Protokoll):
1. Alice wählt Zufallszahl r ∈ Z∗n ;
dann berechnet sie x := r2 mod n und sendet x an Bob
2. Bob wählt ein zufälliges Bit b und sendet dieses an Alice (challenge)
3. Alice bildet y := r ∗ sb mod n und sendet y an Bob (response)
4. Bob überprüft, ob y 2 = x ∗ v b mod n gilt
Wenn Alice das Geheimnis s wirklich kennt, so kann sie Bob auch davon überzeugen, da gilt:
y 2 = (r ∗ sb )2 = r2 ∗ s2b = r2 ∗ v b = x ∗ v b mod n
118
Verallgemeinerung des Fiat–Shamir–Protokolls
n wie oben Produkt zweier großer Primzahlen p 6= q, allerdings jetzt
p, q = 3 mod 4; nat. Zahlen k, t werden als Sicherheitsparameter gewählt
Jede Partei A, die sich später gegenüber anderen authentifizieren will, macht
folgendes:
1. Auswahl von k zufälligen ganzen Zahlen s1 , · · · , sk mit 1 ≤ si ≤ n − 1 und
Auswahl von k zufälligen Bits b1 , · · · , bk ; dabei muss ggt(si, n)=1 sein
2. A berechnet vi := (−1)bi ∗ (s2i )−1 mod n für 1 ≤ i ≤ k
3. A identifiziert sich durch nicht–kryptografische Mittel gegenüber TTP, die
dann A’s öffentlichen Schlüssel (v1, · · · , vk , n) registriert; nur A kennt seinen
privaten Schlüssel (s1, · · · , sk ) (und n).
Bob akzeptiert Alice’s Identität, falls das folgende Protokoll t–mal erfolgreich
verläuft:
1. Alice wählt Zufallszahl r ∈ Z∗n und Zufallsbit b;
dann berechnet sie x := (−1)b ∗ r2 mod n und sendet x an Bob
2. Bob wählt zufälligen Bitvektor (e1, · · · , ek ) und sendet diesen an Alice
(challenge)
3. Alice bildet y := r ∗
4. Bob berechnet z :=
z 6= 0
Qk
ej
j=1 sj mod n und
Q
e
y 2 ∗ kj=1 vj j mod n
119
sendet y an Bob (response)
und verifiziert, dass z = ±x und
TTP bzw. TA wählen folgende Parameter bzw. Verfahren und Funktionen aus
(Vorbereitungen zur Authentifizierung nach Schnorr)
ˆ TA (Trusted Authority) wählt große Primzahl p (p ≥ 2512), so dass das
diskrete Logarithmus–Problem in Z∗p praktisch unlösbar ist
ˆ q sei ein großer Primfaktor von p − 1 (q > 2140)
ˆ α ∈ Z∗p habe die Ordnung q (α ist die
Elementes von
Z∗p )
p−1
q –te
Potenz eines primitiven
ˆ t ∈ N (Sicherheitsparameter) wird so gewählt, dass q > 2t (z.B. t = 40)
ˆ TA stellt weiterhin ein sicheres Signaturschema zur Verfügung mit einem
geheimen Signierungsalgorithmus sigT A und einem öffentlichen Verifikationsalgorithmus verT A
ˆ eine kryptografische Hash–Funktion wird festgelegt (damit wird vor dem
Signieren der Nachricht deren Hashwert berechnet)
p, q, α, verT A und die Hash–Funktion sind öffentlich
Ausgabe eines Zertifikates an Alice durch die TA
ˆ TA stellt Alice’s Identität fest durch konventionelle Methoden (Pass etc.)
und legt eine Zeichenkette ID(Alice) fest, die Alice’s Identifizierungs–
Information enthält
ˆ Alice wählt einen zufälligen Exponent a mit 0 ≤ a ≤ q − 1, der geheim
bleibt; dann berechnet sie
v := α−a mod p
und übergibt v an die TA
ˆ TA erzeugt eine Signatur
s := sigT A (ID(Alice), v) ;
das Zertifikat
C(Alice) := (ID(Alice), v, s)
wird an Alice übergeben und kann veröffentlicht werden
120
Authentifizierungsprotokoll nach Schnorr
1. Alice wählt Zufallszahl k mit 0 ≤ k ≤ q − 1 und berechnet γ := αk mod p;
sie sendet dann C(Alice) und γ an Bob
2. Bob verifiziert, dass verT A(ID(Alice), v, s) = true und wählt Zufallszahl r
mit 1 ≤ r ≤ 2t ;
er sendet dann r an Alice (challenge)
3. Alice berechnet y := k + a ∗ r mod q und sendet y an Bob (response)
4. Bob verifiziert, dass γ = αy ∗ v r mod p ist
121
Herunterladen