Teil 1
Teil 1
Teil 1
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Kryptographie<br />
Kriterien zur Einteilung von Kryptosystemen<br />
– Anwendungsfall:<br />
• Konzelation<br />
• Authentikation<br />
• Hashfunktionen<br />
• Pseudozufallszahlengeneratoren<br />
– Schlüsselbeziehung Sender–Empfänger<br />
• Symmetrische Systeme<br />
• Asymmetrische Systeme<br />
– Alphabet, auf dem die Chiffre operiert<br />
• Blockchiffre: Operiert auf Blöcken von Zeichen<br />
• Stromchiffren: Operiert auf einzelnen Zeichen<br />
– Längentreue<br />
– Sicherheit<br />
• (informations) theoretisch sicher<br />
• kryptographisch stark (beweisbar)<br />
– gegen aktive Angriffe<br />
– gegen passive Angriffe<br />
• wohluntersucht<br />
– Mathematik<br />
– Chaos<br />
• geheimgehaltene
Angriffsarten und Sicherheitskriterien<br />
Was kennt der Angreifer, was kann er wählen oder verändern?<br />
–<br />
ciphertext-only attack<br />
–<br />
known<br />
[adaptively] chosen<br />
} – { plaintext<br />
ciphertext } attack<br />
• adaptively: Der Angreifer kann in Abhängigkeit vorheriger<br />
gewählter Nachrichten neue Nachrichten wählen<br />
• not adaptively: Der Angreifer muß alle Nachrichten zu Beginn<br />
wählen, kann also nicht abhängig vom Verschlüsselungsergebnis,<br />
weitere Nachrichten wählen.<br />
Was wird durch den Angriff erreicht?<br />
(Brechen = Fälschen | Entschlüsseln)<br />
– Vollständiges Brechen: Finden des Schlüssels<br />
– Universelles Brechen: Finden eines zum Schlüssel äquivalenten<br />
Verfahrens<br />
– Nachrichtenbezogenes Brechen: Brechen für einzelne<br />
Nachrichten, ohne den Schlüssel selbst in Erfahrung zu bringen.<br />
• selektives Brechen: für eine vom Angreifer bestimmte Nachricht<br />
(z.B. einen abgefangenen Schlüsseltext)<br />
• existenzielles Brechen: für irgendeine Nachricht<br />
Aufwand/Kosten:<br />
– Einmalige Kosten, jeder Schlüssel effizient knackbar<br />
– Jeder Angriff verursacht Kosten beim Angreifer
Kryptographie<br />
Systematisierung und Beispiele<br />
symmetrische<br />
Konzelationssysteme<br />
DES, Triple DES, IDEA,<br />
(Pseudo)-One-time-pad<br />
Authentikationssysteme<br />
Symmetrische<br />
Authentikationscodes<br />
asymmetrische RSA, McEliece, ElGamal<br />
RSA, GMR, DSS, ElGamal<br />
Sicherheit<br />
Sicherheit<br />
Systemtyp<br />
Konzelation<br />
Authentikation<br />
sym. asym. sym. asym.<br />
sym.<br />
Konzelationssystem<br />
⊃<br />
asym.<br />
Konzelationssystem<br />
sym.<br />
Authentikationssystem<br />
⊃<br />
digitales<br />
Signatursystem<br />
∩<br />
informationstheoretisch<br />
kryptographisch<br />
stark<br />
gegen …<br />
∩<br />
aktiver<br />
Angriff<br />
∩<br />
passiver<br />
Angriff<br />
Chaos<br />
Vernam-Chiffre<br />
(one-time pad)<br />
wohluntersucht<br />
Mathematik<br />
Pseudo-onetime-pad<br />
mit<br />
s<br />
2<br />
-mod-n-<br />
Generator<br />
DES<br />
?<br />
System mit<br />
s<br />
2<br />
-mod-n-<br />
Generator<br />
RSA<br />
Authentikationscodes<br />
DES<br />
GMR<br />
RSA<br />
?<br />
kann es nicht geben zur Zeit nicht bekannt wird von bekanntem System majorisiert
Symmetrische Kryptographie<br />
Symmetrisches Konzelationssystem<br />
Zufallszahl<br />
k<br />
Schlüsselgenerierung<br />
geheimer<br />
Schlüssel<br />
k<br />
Klartext<br />
x<br />
Schlüsseltext<br />
k(x)<br />
Verschlüsselung<br />
Entschlüsselung<br />
Klartext<br />
x<br />
Symmetrisches Authentikationssystem<br />
Zufallszahl<br />
k<br />
geheimer<br />
Schlüssel<br />
Schlüsselgenerierung<br />
k<br />
Klartext<br />
x<br />
Codieren<br />
Schlüsseltext<br />
x, k(x)<br />
MAC<br />
message<br />
authentication<br />
code<br />
Test:<br />
MAC = k(x)<br />
Klartext und<br />
Testergebnis<br />
x, k(x)<br />
„ok“ oder „falsch“
Asymmetrische Kryptographie<br />
Asymmetrisches Konzelationssystem<br />
Zufallszahl<br />
c<br />
Chiffrierschlüssel,<br />
öffentlich bekannt<br />
d<br />
Dechiffrierschlüssel,<br />
geheimgehalten<br />
Klartext<br />
x<br />
Schlüsseltext<br />
c(x)<br />
Verschlüsselung<br />
Entschlüsselung<br />
Klartext<br />
x<br />
Digitales Signatursystem<br />
Zufallszahl<br />
Text mit Signatur<br />
und Testergebnis<br />
x, Sig(x), Testen<br />
„ok“ oder „falsch“<br />
t<br />
Schlüssel zum Testen<br />
der Signatur,<br />
öffentlich bekannt<br />
Text mit<br />
Signatur<br />
x, Sig(x)<br />
Schlüsselgenerierung<br />
Schlüsselgenerierung<br />
s<br />
Signieren<br />
Schlüssel zum<br />
Signieren,<br />
geheimgehalten<br />
Text<br />
x
Schlüsselverteilung bei symmetrischem Kryptosystem<br />
Schlüsselverteilzentrale<br />
für X<br />
verschlüsselter<br />
geheimer Schlüssel<br />
k<br />
k<br />
für Y<br />
verschlüsselter<br />
geheimer Schlüssel<br />
Schlüsseltext<br />
<strong>Teil</strong>nehmerin X<br />
<strong>Teil</strong>nehmer Y<br />
Dezentralisierung ist möglich<br />
Schlüsselverteilzentralen<br />
A B C<br />
k AX (k 1 ) k BX (k 2 ) k CX (k 3 ) k AY (k 1 ) k BY (k 2 ) k CY (k 3 )<br />
Schlüssel k = k 1 + k 2 + k 3<br />
<strong>Teil</strong>nehmerin X<br />
k(Nachrichten)<br />
<strong>Teil</strong>nehmer Y
Schlüsselverteilung bei asymmetrischem Kryptosystem<br />
Asymmetrische Konzelation<br />
Öffentliches Schlüsselregister R<br />
- -<br />
1.<br />
A läßt öffentlichen<br />
Chiffrierschlüssel c A<br />
(ggf. anonym)<br />
eintragen<br />
2.<br />
B bittet R<br />
um c A<br />
3.<br />
B erhält c A , beglaubigt<br />
durch Signatur<br />
von R<br />
<strong>Teil</strong>nehmerin A<br />
4.<br />
c A (Nachricht an A)<br />
<strong>Teil</strong>nehmer B<br />
Signatursystem<br />
Öffentliches Schlüsselregister R<br />
- -<br />
1.<br />
A läßt öffentlichen<br />
Testschlüssel t A<br />
(ggf. anonym)<br />
eintragen<br />
2.<br />
B bittet R<br />
um t A<br />
3.<br />
B erhält t A , beglaubigt<br />
durch Signatur<br />
von R<br />
<strong>Teil</strong>nehmerin A<br />
4.<br />
Nachricht von A, s A (Nachricht von A)<br />
<strong>Teil</strong>nehmer B
Schlüsselgenerierung<br />
Erzeugung einer Zufallszahl z für die Schlüsselgenerierung:<br />
z 1<br />
gfjjbz<br />
⊕ z 2<br />
⊕ z 3<br />
…<br />
⊕ z n<br />
z<br />
gen<br />
XOR aus<br />
z 1 ,<br />
einer im Gerät erzeugten,<br />
z 2 ,<br />
z 3 ,<br />
einer vom Hersteller gelieferten,<br />
einer vom Benutzer gelieferten,<br />
…,<br />
z n ,<br />
einer aus Zeitabständen errechneten<br />
Zufallszahl
Hybride Kryptosysteme<br />
Kombiniere:<br />
– von asymmetrischen: einfache Schlüsselverteilung<br />
– von symmetrischen: Effizienz (Faktor 100-1000, Software und Hardware)<br />
– asymmetrisches System nur zum Schlüsselaustausch<br />
Konzelation<br />
A<br />
besorge c B<br />
wähle k<br />
N<br />
c B (k), k(N)<br />
B<br />
Entschlüssle k mit d B<br />
Entschlüssle N mit k<br />
– Noch effizienter: <strong>Teil</strong> von N in 1. Block auffüllen:<br />
c B (k, N'), k(N'') mit N=N'+N''<br />
– Wenn auch B k benutzen soll: s A (k) dazulegen<br />
Authentikation (k geheim und authentisiert)<br />
A<br />
besorge c B<br />
wähle k<br />
N<br />
N, k(n), c B (k, s A (k))<br />
B<br />
Besorge t A<br />
Entschlüssle k, s A (k) mit d B<br />
Teste k mit t A<br />
Teste N mit k<br />
– Nachrichtenintegrität ohne Verbindlichkeit/Zurechenbarkeit
Umsetzung von Sicherheitsfunktionen in Gateways<br />
Motivation<br />
– A und B haben nicht kompatible (Sicherheits)-Systeme; Sicht des<br />
Empfängers: kein Test von Signatur/MAC möglich, keine<br />
Entschlüsselung möglich<br />
– Performance bei B nicht, um selbst zu prüfen / entschlüsseln<br />
–> Verwendung eines Proxys zur Umsetzung<br />
Digitale Signatur<br />
– GW testet Signatur stellvertretend für B; B vertraut GW;<br />
m wird GW nicht notwendigerweise bekannt<br />
GW<br />
testet<br />
Signatur<br />
sigA(m)<br />
ok / n.ok<br />
A<br />
m, sigA(m)<br />
B<br />
Vertraulichkeit<br />
– nur unbefriedigend möglich, da geheime Information zum Entschlüsseln<br />
nötig, jedoch: Verteilung erhöht wieder Vertraulichkeit<br />
kA1(m1)<br />
GW1<br />
kB1(m1)<br />
A<br />
kA3(m3)<br />
kA2(m2)<br />
GW2<br />
GW3<br />
kB2(m2)<br />
kB3(m3)<br />
B<br />
m = m1 + m2 + m3
Konkrete Systeme<br />
Symmetrische Systeme<br />
– One-Time-Pad (Vernam-Chiffre)<br />
– Symmetrische Authentikationscodes<br />
– DES (Data Encryption Standard)<br />
– IDEA (International Data Encryption Algorithm)<br />
– AES (Advanced Encryption Standard)<br />
Praktischer Einsatz<br />
– Betriebsarten von Blockchiffren<br />
Asymmetrische Systeme<br />
– Diffie-Hellmann-Key-Exchange<br />
– El Gamal Kryptosystem<br />
– RSA zur Konzelation und Signatur<br />
– Blinde Signaturen mit RSA<br />
– Kryptosysteme auf Basis elliptischer Kurven
One-Time-Pad (mod 2)<br />
X ⊕ K = S<br />
0<br />
0<br />
1<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
– Bits von K sind zufällig und unabhängig<br />
– Jedes Schlüsselbit darf nur einmal verwendet<br />
werden<br />
– Schlüssel genauso lang wie Klartext<br />
Angreifer sieht S: K kann sein: dann ist X gewesen:<br />
0<br />
1<br />
0<br />
0<br />
1<br />
1<br />
0<br />
1<br />
– Der Angreifer kann alle 4 Varianten durchrechnen, erhält dadurch aber<br />
keine zusätzliche Information über den Klartext.<br />
– Die Wahrscheinlichkeit, ein Kartextbit richtig zu raten, verändert sich<br />
durch die Beobachtung des Schlüsseltextes nicht, sondern bleibt<br />
const = 0,5.
One-Time-Pad (mod 2)<br />
01<br />
10<br />
Zufallszahlen<br />
K<br />
K<br />
X<br />
00<br />
11<br />
S<br />
01<br />
00<br />
11<br />
Sender<br />
Angriffsbereich<br />
Empfänger<br />
»Hinter jedem Schlüsseltext kann sich jeder Klartext verbergen«<br />
– Informationstheoretisch sichere Konzelation: Egal, was der<br />
Angreifer a priori an Information über den Klartext hat, er gewinnt durch die<br />
Beobachtung des Schlüsseltextes keine Information hinzu.<br />
∀ s ∈ S ∃ const ∈ IN ∀ x ∈ X : | { k ∈ K | k(x)=s } | = const (1)<br />
Für alle Schlüsseltexte s existiert eine konstante Anzahl von Schlüsseln k, die jeweils<br />
alle Klartexte x derart verschlüsseln, daß aus x jeder Schlüsseltext entstehen kann.<br />
IN = {1, 2, 3, …}
Symmetrische Authentikationscodes<br />
k<br />
x, MAC<br />
H,0 H,1 T,0 T,1<br />
00<br />
01<br />
10<br />
11<br />
H<br />
H<br />
–<br />
–<br />
–<br />
–<br />
H<br />
H<br />
T<br />
–<br />
T<br />
–<br />
–<br />
T<br />
–<br />
T<br />
oder<br />
x<br />
k<br />
00<br />
01<br />
10<br />
11<br />
H<br />
0<br />
0<br />
1<br />
1<br />
T<br />
0<br />
1<br />
0<br />
1<br />
MAC<br />
H :="0"<br />
T :="1"<br />
Zufallszahlen<br />
00; 01<br />
K<br />
K<br />
X<br />
H; T H,0; T,1<br />
Angriff 1: Angreifer will T senden<br />
(blind) – erwischt richtigen MAC mit Wkt = 0,5<br />
Angriff 2: Angreifer will H,0 in T ändern<br />
(sehend) – weiß: k ∈ {00,01}<br />
– wenn k = 00 war, muß er T,0 senden<br />
– wenn k = 01 war, muß er T,1 senden<br />
– Wkt. ist immernoch 0,5
Symmetrische Authentikationscodes<br />
k<br />
x, MAC<br />
H,0 H,1 T,0 T,1<br />
00<br />
01<br />
10<br />
11<br />
H<br />
H<br />
–<br />
–<br />
–<br />
–<br />
H<br />
H<br />
T<br />
–<br />
T<br />
–<br />
–<br />
T<br />
–<br />
T<br />
oder<br />
x<br />
k<br />
00<br />
01<br />
10<br />
11<br />
H<br />
0<br />
0<br />
1<br />
1<br />
T<br />
0<br />
1<br />
0<br />
1<br />
MAC<br />
H :="0"<br />
T :="1"<br />
Angreifer sieht:<br />
H,0<br />
H,1<br />
K kann sein:<br />
00<br />
01<br />
10<br />
11<br />
Angreifer will x<br />
fälschen und such<br />
passenden MAC<br />
T,0<br />
T,1<br />
Wkt., daß Angreifer<br />
den richtigen MAC<br />
führ das Bit wählt, ist<br />
0,5 (d.h. „Raten“)<br />
T,0<br />
10<br />
00<br />
H,0<br />
T,1<br />
01<br />
11<br />
H,1<br />
informationstheoretisch sicher
DES (Data Encryption Standard)<br />
– 1977 vom National Bureau of Standards<br />
(NBS) der USA standardisiert<br />
– Blockchiffre: operiert auf Blöcken von<br />
jeweils 64 Bit<br />
– Feistel-Chiffre: interierte Anwendung<br />
eines Verschlüsselungsschemas aus<br />
Permutationen, Substitutionen und<br />
Expansionen<br />
– n Runden<br />
– Schema ist selbstinvers<br />
– Funktion F kann Einwegfunktion sein<br />
– Gütekriterien: Höchstmaß an<br />
• Vollständigkeit<br />
• Avalanche<br />
• Nichtlinearität<br />
• Korrelationsimmunität<br />
L<br />
L<br />
L<br />
M<br />
R<br />
0 0<br />
F<br />
R<br />
1 1<br />
R<br />
n-1 n-1<br />
F<br />
K 1<br />
K n<br />
– weitere Kriterien<br />
L<br />
n<br />
R<br />
n<br />
• gute Implementierbarkeit<br />
• Längentreue<br />
C<br />
• Schnelligkeit
Feistel-Prinzip<br />
Verschlüsselung<br />
L<br />
R<br />
0 0<br />
F<br />
K 1<br />
L 1 = R 0 (1)<br />
R 1 = f(R 0 ) ⊕ L 0 (2)<br />
L<br />
L'<br />
R<br />
1 1<br />
Entschlüsselung<br />
R'<br />
1 1<br />
L' 1 = R 1 (3)<br />
R' 1 = L 1 (4)<br />
F<br />
K 1<br />
L' 0 = R' 1 (5)<br />
R' 0 = f(R' 1 ) ⊕ L' 1 (6)<br />
L'<br />
R'<br />
0 0<br />
Nachweis, daß Feistel-Chiffren selbstinvers sind<br />
L' 0 = R' 1 = L 1 = R o mit (5), (4), (1)<br />
R' 0 = f(R' 1 ) ⊕ L' 1<br />
R' 0 = f(R' 1 ) ⊕ R 1<br />
R' 0 = f(R' 1 ) ⊕ f(R 0 ) ⊕ L 0<br />
R' 0 = f(L 1 ) ⊕ f(R 0 ) ⊕ L 0<br />
R' 0 = f(R 0 ) ⊕ f(R 0 ) ⊕ L 0<br />
R' 0 = L 0<br />
mit (3) folgt<br />
mit (2) folgt<br />
mit (4) folgt<br />
mit (1) folgt<br />
mit (1) folgt
DES (Data Encryption Standard)<br />
Feistel-Chiffre<br />
– Blockbreite 64 Bit<br />
– n = 16 Runden<br />
– <strong>Teil</strong>schlüssel K 1…16 (jeweils 48 Bit) werden aus einem 56-Bit Schlüssel<br />
gewonnen<br />
– Vor der ersten und nach der letzen Runde durchläuft der Datenblock<br />
eine Permutation IP bzw. IP-1, die kryptographisch irrelevant ist.<br />
Funktion F(K i , R i-1 )<br />
– Expansionsabbildung von 32 auf 48 Bit<br />
– 8 S-Boxen, jede S-Box: 6-Bit-Input, 4-Bit-Output<br />
– 32-Bit-Permutation<br />
<strong>Teil</strong>schlüsselgenerierung<br />
– Permuted Choice 1 (Schlüsselpermutation)<br />
– Zyklische Schiebeoperationen auf Registern C und D in Abh. der Runde<br />
– Permuted Choice 2 (Schlüsselauswahl 48 aus 56 Bit)
DES (Data Encryption Standard)
DES (Data Encryption Standard)<br />
S-Boxen<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
S1: 0: 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7<br />
1: 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8<br />
2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0<br />
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13<br />
S2: 0: 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10<br />
1: 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5<br />
2: 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15<br />
3: 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9<br />
S3: 0: 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8<br />
1: 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1<br />
2: 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7<br />
3: 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12<br />
S4: 0: 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15<br />
1: 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9<br />
2: 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4<br />
3: 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14<br />
S5: 0: 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9<br />
1: 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6<br />
2: 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14<br />
3: 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3<br />
S6: 0: 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11<br />
1: 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8<br />
2: 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6<br />
3: 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13<br />
S7: 0: 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1<br />
1: 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6<br />
2: 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2<br />
3: 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12<br />
S8: 0: 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7<br />
1: 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2<br />
2: 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8<br />
3: 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
DES (Data Encryption Standard)<br />
Inputpermutation IP<br />
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4<br />
62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8<br />
57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3<br />
61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7<br />
Outputpermutation IP-1<br />
40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31<br />
38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29<br />
36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27<br />
34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25<br />
Expansionsabbildung E<br />
32 1 2 3 4 5 4 5 6 7 8 9<br />
8 9 10 11 12 13 12 13 14 15 16 17<br />
16 17 18 19 20 21 20 21 22 23 24 25<br />
24 25 26 27 28 29 28 29 30 31 32 1<br />
Permutationsabbildung P<br />
16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10<br />
2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25<br />
Schlüsselpermutation (Permuted Choice 1, PC1)<br />
57 49 41 33 25 17 9 1<br />
58 50 42 34 26 18 10 2<br />
59 51 43 35 27 19 11 3<br />
60 52 44 36<br />
63 55 47 39 31 23 15 7<br />
62 54 46 38 30 22 14 6<br />
61 53 45 37 29 21 13 5<br />
28 20 12 4<br />
Schlüsselauswahl (Permuted Choice 2, PC2)<br />
14 17 11 24 1 5 3 28 15 6 21 10<br />
23 19 12 4 26 8 16 7 27 20 13 2<br />
41 52 31 37 47 55 30 40 51 45 33 48<br />
44 49 39 56 34 53 46 42 50 36 29 32<br />
Anzahl der Shifts bei der Chiffrierung bzw. Deciffrierung<br />
Rundennummer: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16<br />
Links-Shifts: 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 (Ver)<br />
Rechts-Shifts: 0 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 (Ent)
Eigenschaften des DES<br />
– Der DES ist vollständig: Jedes Output-Bit hängt von jedem Input-Bit ab.<br />
– Der DES ist derart komplex, daß keinerlei analytische Abhängigkeit<br />
zwischen Input und Output oder Schlüssel und Output feststellbar ist.<br />
– Der DES ist invariant gegenüber Komplementbildung, d.h.<br />
DES(K, M) = DES(K, M)<br />
– Vier der 2 56 Schlüssel sind schwach, d.h. DES(K, DES(K, M)) = M.<br />
Externer SchlŸssel C-Register D-Register<br />
01 01 01 01 01 01 01 01 0000000 0000000<br />
1F 1F 1F 1F 0E 0E 0E 0E 0000000 FFFFFFF<br />
E0 E0 E0 E0 F1 F1 F1 F1 FFFFFFF 0000000<br />
FE FE FE FE FE FE FE FE FFFFFFF FFFFFFF<br />
Kritikpunkte<br />
– Designkriterien wurden nicht offengelegt (inzwischen bekannt)<br />
– wirksame Schlüssellänge heute viel zu gering (56 Bit)<br />
– nur ineffizient in Software implementierbar (wg. Permutationen)<br />
3-DES (Triple-DES)<br />
– Verbesserung der Sicherheit durch 3-fache Anwendung<br />
S = DES(K1, DES(K2, DES(K1, M)))
IDEA — International Data Encryption Algorithm<br />
Symmetrische Blockchiffre<br />
M ∈ {0,1} 64 , K ∈ {0,1} 128<br />
Operationen<br />
bitweise Addition mod 2<br />
.<br />
Addition mod 2 16<br />
Multiplikation mod 2 16 + 1 (0 wird durch 2 16 dargestellt)<br />
– M wird in vier 16-Bit-Operanden m 1 … m 4 .zerlegt.<br />
– Es werden i=1…8 Runden durchlaufen.<br />
– Aus K werden sechs 16-Bit-Operanden k i,1 … k i,6 .erzeugt.<br />
<strong>Teil</strong>schlüsselgenerierung<br />
– K → k 1,1 … k 1,6 , k 2,1 , k 2,2 (K wird in 8 <strong>Teil</strong>e zerlegt.)<br />
– shiftLeft(K, 25) → k 2,3 … k 2,6 , k 3,1 … k 3,4<br />
– shiftLeft(K, 25) → k 3,5 , k 3,6 , k 4,1 … k 4,6<br />
– u.s.w<br />
Nach jeder Erzeugung zyklische Linksverschiebung von K um 25 Bitstellen.
IDEA — International Data Encryption Algorithm<br />
m 1<br />
m 2<br />
m 3<br />
m 4<br />
k i,1<br />
. +<br />
k i,2 k i,3 + . k i,4<br />
+<br />
selbstinvers<br />
+<br />
. +<br />
k i,5<br />
k i,6<br />
+<br />
.<br />
+<br />
+<br />
+<br />
+<br />
k 9,1 . + k 9,2 k 9,3 + . k 9,4<br />
c 1<br />
c 2 c 3<br />
c 4<br />
+<br />
.<br />
+<br />
Addition mod2 16 Multiplikation mod(2 16 +1)<br />
XOR
IDEA — International Data Encryption Algorithm<br />
Entschlüsselung<br />
– kj sei <strong>Teil</strong>schlüssel zum Verschlüsseln in Runde j<br />
– dj sei <strong>Teil</strong>schlüssel zum Entschlüsseln in Runde j<br />
– r max sei Rundenzahl (hier r max = 8)<br />
– z = r max +2<br />
d j,1 = (k z-j,1 ) -1 mod 2 16 +1 mit 1 ≤ j ≤ r max +1<br />
d j,4 = (k z-j,4 ) -1 mod 2 16 +1 mit 1 ≤ j ≤ r max +1<br />
d j,2 = (k z-j,2 ) -1 mod 2 16 mit j = 1, j = r max +1<br />
d j,2 = (k z-j,3 ) -1 mod 2 16 mit 1 < j < r max +1<br />
d j,3 = (k z-j,3 ) -1 mod 2 16 mit j = 1, j = r max +1<br />
d j,3 = (k z-j,2 ) -1 mod 2 16 mit 1 < j < r max +1<br />
d j,5 = (k z-(j+1),5 ) mit 1 ≤ j ≤ r max +1<br />
d j,6 = (k z-(j+1),6 ) mit 1 ≤ j ≤ r max +1<br />
Eigenschaften<br />
– sehr gut in Hard- und Software implementierbar<br />
– sehr effizient<br />
– für kommerzielle Anwendungen fallen Lizenzgebühren an
Advanced Encryption Algorithm (AES)<br />
– Januar 1997 vom National Institute of Standards and Technology (NIST)<br />
als Nachfolger für DES initiiert<br />
– Kriterien:<br />
• symmetrische Blockchiffre mit einer Blockgröße von 128 Bit<br />
und variabler Schlüssellänge von 128, 192 und 256 Bit.<br />
• AES soll für mindestens 30 Jahre Sicherheit bieten.<br />
• Weder Algorithmus noch Implementierung dürfen patentiert<br />
sein.<br />
• Spezifikation: http://csrc.nist.gov/encryption/aes/<br />
– August 1998 wurden 15 Kandidaten der Öffentlichkeit zur Begutachtung<br />
vorgelegt.<br />
– August 1999 wurden die 5 Finalisten vorgestellt:<br />
• MARS – IBM<br />
• RC6 – RSA Labs<br />
• Rijndael – Joan Daemen (Proton World Intl.), Vincent Rijmen<br />
(Katholieke Universiteit Leuven, Belgien)<br />
• Serpent – Ross Anderson (Univ of Cambridge), Eli Biham (Technion),<br />
Lars Knudsen (UC San Diego)<br />
• Twofish – Bruce Schneider, John Kelsey, Niels Ferguson<br />
(Counterpane Internet Security), Doug Whiting (Hi/fn, Inc.), David<br />
Wagner (UC Berkeley), Chris Hall (Princeton Univ.)<br />
– Oktober 2000: Rijndael wird ausgewählt.<br />
– Begründung:<br />
• Beste Kombination von Sicherheit, Leistungsfähigkeit,<br />
Effizienz und Implementierbarkeit sowohl in Software als auch<br />
in Hardware.
Rijndael (AES)<br />
– sprich: "Rein-dahl"<br />
http://www.esat.kuleuven.ac.be/~rijmen/rijndael/<br />
– keine Feistel-Chiffre, arbeitet aber in Runden<br />
– Rundentransformation besteht aus drei invertierbaren Transformationen<br />
– variable Blocklänge und variable Schlüssellänge, jeweils unabhängig<br />
wählbar aus {128 Bit, 192 Bit, 256 Bit}.<br />
– Blockbreite {Nachrichtenblock, Schlüssel} in Bit = {Nb, Nk} · 8 Bit · 4 rows<br />
– Beispiel: Nb = 6 und Nk = 4<br />
State<br />
Cipher Key<br />
a 0,0 a 0,1 a 0,2 a 0,3 a 0,4 a 0,5 k 0,0 k 0,1 k 0,2 k 0,3<br />
a 1,0 a 1,1 a 1,2 a 1,3 a 1,4 a 1,5 k 1,0 k 1,1 k 1,2 k 1,3<br />
a 2,0 a 2,1 a 2,2 a 2,3 a 2,4 a 2,5 k 2,0 k 2,1 k 2,2 k 2,3<br />
a 3,0 a 3,1 a 3,2 a 3,3 a 3,4 a 3,5 k 3,0 k 3,1 k 3,2 k 3,3<br />
– Rundenzahl Nr ist eine Funktion von Nb und NK<br />
Nr Nb=4 Nb=6 Nb=8<br />
Nk=4 10 12 14<br />
Nk=6 12 12 14<br />
Nk=8 14 14 14
Rijndael (AES)<br />
Cipher<br />
Rijndael(State,CipherKey) {<br />
KeyExpansion(CipherKey,ExpandedKey);<br />
AddRoundKey(State,ExpandedKey);<br />
For(i=1;i
Rijndael (AES)<br />
ByteSub<br />
– operiert auf jedem Byte von State unabhängig (S-Box-Transformation)<br />
– 1. berechne das Multiplikative Inverse in GF(2 8 ) mit m(x) = x 8 +x 4 +x 3 +x+1<br />
– 2. berechne:<br />
y<br />
y<br />
y<br />
y<br />
y<br />
y<br />
y<br />
y<br />
0<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
1 0 0 0 1 1 1 1<br />
1 1 0 0 0 1 1 1<br />
1 1 1 0 0 0 1 1<br />
1 1 1 1 0 0 0 1<br />
1 1 1 1 1 0 0 0<br />
0 1 1 1 1 1 0 0<br />
0 0 1 1 1 1 1 0<br />
0 0 0 1 1 1 1 1<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
=<br />
0<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
+<br />
1<br />
1<br />
0<br />
0<br />
0<br />
1<br />
1<br />
0<br />
a 0,0 a 0,1 a 0,2 a 0,3 a 0,4 a 0,5 a 0,0 a 0,1 a 0,2 a 0,3 a 0,4 a 0,5<br />
a 1,0 a 1,1 a 1,2 a 1,3 a 1,4 a 1,5 a 1,0 a 1,1 a 1,2 a 1,3 a 1,4 a 1,5<br />
a 2,0 a 2,1 a 2,2 a 2,3 a 2,4 a 2,5 a 2,0 a 2,1 a 2,2 a 2,3 a 2,4 a 2,5<br />
a 3,0 a 3,1 a 3,2 a 3,3 a 3,4 a 3,5 a 3,0 a 3,1 a 3,2 a 3,3 a 3,4 a 3,5<br />
– ByteSub kann als Tabelle vorberechnet werden.<br />
– Umkehroperation: Inverse Tabelle und anschließend Berechnung des<br />
Multiplikatieven Inversen in GF(2 8 )
Rijndael (AES)<br />
ShiftRow<br />
– Anzahl der zyklischen Linksshifts in Abhängigkeit von Nb<br />
row 0 row 1 row 2 row 3<br />
– Beispiel: Nb=6<br />
Nb=4 0 1 2 3<br />
Nb=6 0 1 2 3<br />
Nb=8 0 1 3 4<br />
row 0: no shift a 0,0 a 0,1 a 0,2 a 0,3 a 0,4 a 0,5<br />
row 1: 1 shift a 1,0 a 1,1 a 1,2 a 1,3 a 1,4 a 1,5<br />
row 2: 2 shift a 2,0 a 2,1 a 2,2 a 2,3 a 2,4 a 2,5<br />
row 3: 3 shift a 3,0 a 3,1 a 3,2 a 3,3 a 3,4 a 3,5<br />
– Resultat<br />
a 0,0 a 0,1 a 0,2 a 0,3 a 0,4 a 0,5<br />
a 1,1 a 1,2 a 1,3 a 1,4 a 1,5 a 1,0<br />
a 2,2 a 2,3 a 2,4 a 2,5 a 2,0 a 2,1<br />
a 3,3 a 3,4 a 3,5 a 3,0 a 3,1 a 3,2
Rijndael (AES)<br />
MixColumn<br />
– operiert auf allen Spalten von State<br />
– Berechne<br />
b(x) = a(x) ⊗ c(x) mod x 4 +1<br />
mit c(x) = '03' x 3 + '01' x 2 + '01' x + 02<br />
– d.h.<br />
b<br />
b<br />
b<br />
b<br />
0<br />
1<br />
2<br />
3<br />
=<br />
02 03 01 01<br />
01 02 03 01<br />
01 01 02 03<br />
03 01 01 02<br />
a<br />
a<br />
a<br />
a<br />
0<br />
1<br />
2<br />
3<br />
a 0,0 a 0,1 a 0,2 a 0,3 a 0,4 a 0,5 b 0,0 b 0,1 b 0,2 b 0,3 b 0,4 b 0,5<br />
a 1,0 a 1,1 a 1,2 a 1,3 a 1,4 a 1,5 b 1,0 b 1,1 b 1,2 b 1,3 b 1,4 b 1,5<br />
a 2,0 a 2,1 a 2,2 a 2,3 a 2,4 a 2,5 b 2,0 b 2,1 b 2,2 b 2,3 b 2,4 b 2,5<br />
a 3,0 a 3,1 a 3,2 a 3,3 a 3,4 a 3,5 b 3,0 b 3,1 b 3,2 b 3,3 b 3,4 b 3,5<br />
– Inverse Operation:<br />
a(x) = b(x) ⊗ d(x) mod x 4 +1<br />
mit d(x) = '0B' x 3 + '0D' x 2 + '09' x + 0E, da<br />
( '03' x 3 + '01' x 2 + '01' x + 02 ) ⊗ d(x) = '01' (neutrales Element bzgl. Mult.)<br />
AddRoundKey<br />
– Länge von RoundKey entspricht Nb<br />
– Berechne bitweise XOR-Verknüpfung von State und RoundKey:<br />
State := State ⊕ RoundKey
Rijndael (AES)<br />
KeyExpansion<br />
– für Nk6:<br />
KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)]) {<br />
for(i = 0; i < Nk; i++)<br />
W[i] = (key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]);<br />
for(i = Nk; i < Nb * (Nr + 1); i++) {<br />
temp = W[i - 1];<br />
if (i % Nk == 0)<br />
temp = ByteSub(RotByte(temp)) ^ Rcon[i / Nk];<br />
else if (i % Nk == 4)<br />
temp = ByteSub(temp);<br />
W[i] = W[i - Nk] ^ temp;<br />
}<br />
}
Rijndael (AES)<br />
– RotByte: zyklische Schiebeoperation<br />
– Rcon[i] = (RC[i], '00','00','00')<br />
RC[1] = 1<br />
RC[2] = x • (RC[i-1]) = x (i-1)<br />
RoundKey Selection<br />
– fortlaufende Auswahl<br />
– Beispiel für Nb = 6 und Nk = 4:<br />
W 0 W 1 W 2 W 3 W 4 W 5 W 6 W 7 W 8 W 9 W 10 W 11 W 12 W 13 W 14 …<br />
Round Key 0 Round Key 1 …
Betriebsarten von Blockchiffren<br />
Electronic Code Book (ECB)<br />
M<br />
E<br />
C<br />
-1<br />
E<br />
M<br />
K<br />
K<br />
Sender<br />
Empfänger<br />
C = E(K, M) M = E -1 (K, M)<br />
Cipher Block Chaining (CBC)<br />
M<br />
E<br />
C<br />
-1<br />
E<br />
M<br />
Sender<br />
K<br />
IV<br />
K<br />
Empfänger<br />
C 0 = IV<br />
C i = E(K, M i ⊕ C i-1 )<br />
C 0 = IV<br />
M i = E -1 (K, C i ) ⊕ C i-1 )
Betriebsarten von Blockchiffren<br />
CBC zur Authentikation<br />
E<br />
E<br />
K<br />
IV<br />
K<br />
letzter<br />
IV<br />
Block Vergleich ok?<br />
M<br />
Sender<br />
M<br />
Empfänger<br />
M<br />
PCBC (Plain Cipher Block Chaining)<br />
h<br />
h<br />
M<br />
E -1<br />
E<br />
C<br />
M<br />
Sender<br />
K<br />
K<br />
Empfänger<br />
h beliebige Funktion, z.B. Addition mod 2 Blocklänge<br />
– gleichzeitig Authentisierung und Verschlüsselung<br />
– letzter Block ist Redundanzblock für Authentikation
Betriebsarten von Blockchiffren<br />
Output Feedback (OFB)<br />
E<br />
E<br />
K<br />
K<br />
M<br />
IV<br />
Sender<br />
C<br />
IV<br />
Empfänger<br />
M<br />
Cipher Feedback (CFB)<br />
E<br />
E<br />
K<br />
K<br />
M<br />
IV<br />
Sender<br />
C<br />
IV<br />
Empfänger<br />
M
Betriebsarten von Blockchiffren<br />
Fehlerfortpflanzung<br />
Fehlerstelle<br />
ECB-Modus<br />
CBC-Modus<br />
PCBC-Modus<br />
OFB-Modus<br />
CFB-Modus
Betriebsarten von Blockchiffren<br />
Modus Vorteile Nachteile<br />
ECB Direktzugriff möglich<br />
CBC<br />
OFB<br />
CFB<br />
keine Fehlerfortpflanzung bei<br />
additiven Fehlern<br />
gleiche Klartextblöcke liefern<br />
unterschiedliche Chiffretextblöcke<br />
Manipulationen sind erkennbar<br />
Kryptoanalyse erschwert<br />
gegenüber ECB-Modus<br />
keine Fehlerfortpflanzung bei<br />
additiven Fehlern<br />
Schlüsselstrom abhängig von<br />
Klartextstrom<br />
Kryptoanalyse erschwert<br />
gegenüber OFB-Modus<br />
Manipulationen sind erkennbar<br />
selbstsynchronisierender Modus<br />
Fehlerfortpflanzung in alle<br />
nachfolgenden Blöcke bei<br />
Synchronisationsfehlern<br />
gezieltes Einfügen und Entfernen von<br />
Blöcken möglich<br />
gleiche Klartextblöcke liefern gleiche<br />
Chiffretextblöcke<br />
Codebuchanalyse möglich<br />
kein Direktzugriff möglich<br />
Fehlerfortpflanzung in den Folgeblock<br />
bei additiven Fehlern<br />
anfällig gegen Synchronisationsfehler<br />
geringere Verschlüsselungsrate pro<br />
DES-Aufruf als ECB- und CBC-Modus<br />
(abh. von Bitbreite)<br />
kein Direktzugriff möglich<br />
unerkennbare Manipulationen sind u.U.<br />
möglich<br />
anfällig gegen Synchronisationsfehler<br />
geringere Verschlüsselungsrate pro<br />
DES-Aufruf als ECB-und CBC-Modus<br />
(abh. von Bitbreite)<br />
kein Direktzugriff möglich<br />
Fehlerfortpflanzung
Konstruktionen aus einer symmetrischen Blockchiffre<br />
Hashfunktion<br />
E<br />
letzter Block<br />
M (sonst: K)<br />
– Aus Sicherheitsgründen sollte die Schlüssellänge nicht wesentlich<br />
länger sein als die Blocklänge<br />
Pseudozufallszahlengenerator<br />
E<br />
seed (sonst: K)<br />
pseudo random number
Mathematische Grundlagen asymmetrischer Systeme<br />
Modulo-Rechnung<br />
– Grundlagen<br />
– Erweiterter Euklidscher Algorithmus<br />
Systeme auf der Basis des diskreten Logarithmus<br />
– primitive Wurzel<br />
– diskreter Logarithmus Problem<br />
Systeme auf der Basis der Faktorisierungsannahme<br />
– Faktorisierungsannahme<br />
– Primzahlzerlegung
Erweiterter Euklidscher Algorithmus<br />
Anwendung<br />
– zur Bestimmung von ggT(a,b) und<br />
– zur Ermittlung der multiplikativen Inversen der Zahl b im Restklassenring<br />
modulo a, d. h. zur Berechnung von b-1 aus der Beziehung<br />
Algorithmus<br />
b · b-1 ≡ 1 mod a.<br />
Seien a, b ∈ N +1, a > b<br />
Setze r -2 = a s -2 = 0 t -2 = 1<br />
r -1 = b s -1 = 1 t -1 = 0<br />
Berechne c k , r k , s k und t -k nach folgenden Beziehungen:<br />
c k = r k-2 DIV r k-1<br />
r k = r k-2 MOD r k-1<br />
s k = c k s k-1 + s k-2<br />
t k = c k t k-1 + t k-2<br />
Abbruchbedingung : r k = 0<br />
Es gilt: b · s k-1 – a · t k-1 = (-1)k · r k-1<br />
Ergebnisse:<br />
r k-1 = ggT(a,b)<br />
s k-1 · b = (-1)k mod a, falls ggT(a,b) = 1
Erweiterter Euklidscher Algorithmus<br />
c k = r k-2 DIV r k-1 r k = r k-2 MOD r k-1 s k = c k s k-1 + s k-2 t k = c k t k-1 + t k-2<br />
Beispiel 1<br />
Gegeben: a=10 b=4<br />
Gesucht: ggt(a,b)<br />
k c k r k s k t k<br />
-2 10 = a 0 1<br />
-1 4 = b 1 0<br />
0 2 2 = ggt 2 1<br />
1 2 0 (Abbruch)<br />
Beispiel 2<br />
Gegeben: p=53 q=61 n=p·q=3233 Φ(n)=(p-1)·(q-1)=3120 c=523<br />
Gesucht: c·c-1 = 1 mod Φ(n), d.h. Multiplikatives Inverses zu c mod Φ(n)<br />
k c k r k s k t k<br />
-2 3120 = a = Φ 0 1<br />
-1 523 = b = c 1 0<br />
0 5 505 5 1<br />
1 1 18 6 1<br />
2 28 1 = ggt 173 29<br />
3 18 0 (Abbruch)<br />
Es gilt: s k-1 · b = (-1) k mod a<br />
173 · 523 = (-1)3 mod 3120<br />
90479 = -1 mod 3120<br />
3119 = -1 mod 3120<br />
-1 = -1 mod 3120<br />
Da (-1)k = (-1) 3 = -1, muß noch mit -1 multipliziert werden.<br />
-s k-1 · b = -(-1) k mod a<br />
c = -s k-1 = -173 = -173 + a<br />
c = 2947
Eulersche-Φ-Funktion<br />
Definition Eulersche Φ-Funktion<br />
Für eine beliebige ganze Zahl n bildet die Menge Zn * der ganzen Zahlen<br />
modulo n, die zu n teilerfremd sind, eine multiplikative Gruppe<br />
Die Ordnung dieser Gruppe ist Φ(m).<br />
Beispiel: Φ(9) = 6 Z9 * = {1,2,4,5,7,8}<br />
Für den Sonderfall n = p ∈ P gilt<br />
Φ(p) = p-1.<br />
Satz von Euler<br />
Theorem von Lagrange<br />
Für ein beliebiges x mit (1 ≤ x < n), das zu n teilerfremd ist bzw. x ∈ Zn * , gilt<br />
x Φ(n) = 1 mod n.<br />
Wenn n das Produkt zweier Primzahlen n = p·q ist, gilt<br />
x Φ(p·q) = x (p-1)·(q-1) mod p·q.<br />
Mit Φ(p) = p-1folgt die<br />
Euler-Fermat-Identität<br />
x p-1 = 1 mod p<br />
(1 ≤ x ≤ p-1).
Primitive Wurzel<br />
Definition<br />
Eine beliebige ganze Zahl im Bereich 1 ≤ a < n heißt primitive Wurzel,<br />
wenn gilt<br />
Theorem<br />
ggT (a,n) = 1 und<br />
ad ≠ 1 mod n für alle d mit der Bedingung 1 ≤ d < Φ (n)<br />
Die ganze Zahl n hat genau dann eine primitive Wurzel, wenn n = 1, 2 oder<br />
4 ist oder die Form pk oder 2pk hat, wobei p eine ungerade Primzahl ist.<br />
Wenn n eine primitive Wurzel hat, dann hat n genau Φ(Φ(n)) primitive<br />
Wurzeln.<br />
Vermutung<br />
Jede ganze Zahl, die keine Quadratzahl ist, ist die primitive Wurzel einer<br />
Primzahl.
Diskreter Logarithmus<br />
Definition diskreter Logarithmus<br />
Sei p eine beliebige ganze Zahl, die eine primitive Wurzel a hat. Wenn für<br />
ein beliebiges c mit 0 ≤ c < Φ(p)<br />
b = a c mod p<br />
gilt, dann ist c der diskrete Logarithmus zur Basis a modulo p oder auch<br />
Problemstellung für den Angreifer<br />
– Öffentlich bekannt sind a, b, p.<br />
c = log a b mod p.<br />
– Geheim ist c. Erfährt ein Angreifer c, ist das System gebrochen.<br />
– Folglich möchte ein Angreifer c ermitteln.<br />
Beispiel<br />
– p = 3137; a = 577 öffentlich c = 1374 geheim<br />
– b = a c mod p = 858 öffentlich<br />
– c = log a b mod p = log 577 858 mod 3137 = ? (Angreifersicht)
Diskreter Logarithmus<br />
Algorithmen zur Berechnung des diskreten Logarithmus<br />
– Baby-Step, Giant-Step, Index-Calculus-Alg., Adleman-Alg.<br />
– Laufzeit zur Berechnung des diskreter Log. mod p mit p ∈ P<br />
e (1+o(1))(log p · log (log p))1/2<br />
– Rechenzeiten bei 10 8 Ops pro sek für versch. Größenordungen von p<br />
p Anzahl der Operationen benötigte Zeit in Jahren<br />
≈ 10 100 7,9 · 10 22 2,5 · 10 7<br />
≈ 10 200 1,8 · 10 34 5,7 · 10 19<br />
≈ 10 300 1,8 · 10 43 5,7 · 10 28<br />
≈ 10 400 9,5 · 10 50 4,8 · 10 36<br />
≈ 10 500 7,4 · 10 57 4,8 · 10 43<br />
Vergleich: Logarithmus<br />
log a b (a>0; a≠1; b>0) ist diejenige reele Zahl c, für die gilt a c =b.<br />
c = log a b wird z.B. gelöst mit log a b = log x b<br />
log x a<br />
Beispiel 1: Wieviel Bit benötigt man, um die Zahlen zwischen 0 und 255<br />
binär zu kodieren?<br />
log 2 256 =<br />
Beispiel 2: a = 577; b = 858; c = ?<br />
ln 256<br />
ln 2<br />
= 8 Bit.<br />
ln 858<br />
c = log a b = log 577 858 =<br />
ln 577 = 1,0624.
Faktorisierungsannahme<br />
– Seien p und q zwei große, unabhängig und zufällig gewählte<br />
Primzahlen.<br />
– p und q werden geheimgehalten.<br />
– | p | ≈ | q | ≈ 500…1500 Bit<br />
– Das Produkt n aus p und q wird veröffentlicht:<br />
n = p · q<br />
– Die öffentlich ausführbare Funktion (Verschlüsseln bzw.<br />
Signaturtest) kommt mit dem öffentlichen n aus.<br />
– Die private Funktion (Entschlüsseln bzw. Erzeugen einer<br />
Signatur) nutzt p und q.<br />
Annahme<br />
– Es ist zwar mit vernünftigem Aufwand möglich, Primzahlen p und q zu<br />
finden und diese zu multiplizieren.<br />
– Es ist aber nicht mit vernünftigem Aufwand möglich, die Primfaktoren<br />
von n zu finden.<br />
• Dass Faktorisierung schwer ist, ist bisher nicht bewiesen.<br />
• Annahme: Für jeden »schnellen« Faktorisierungsalgorithmus F(n)<br />
wird die Wahrscheinlichkeit, dass F(n) eine Zahl n=p·q tatsächlich<br />
faktorisieren kann, schnell kleiner, je größer die Länge |p| und |q| der<br />
Faktoren ist.
Diffie-Hellmann-Key-Exchange<br />
A will B Nachricht m schicken<br />
B<br />
Schlüsselgenerierung:<br />
p B ∈P und a primitive Wurzel von p B wählen<br />
x B mit 1 ≤ x B ≤ p B -1 wählen (geheim!)<br />
y B = a x B mod p B berechnen<br />
Veröffentl. in Schlüsselregister:<br />
Key<br />
Server:<br />
B : a, a p, B p, y,<br />
B y<br />
öffentlich<br />
B B B<br />
x B bleibt geheim!<br />
A<br />
liest Eintrag für B<br />
x A mit 1 ≤ x A ≤ p B -1 wählen<br />
y A = a x A mod p B berechnen<br />
Key Agreement:<br />
k AB = y<br />
x B A mod p B berechnen<br />
Verschlüsselung:<br />
c = E(k AB<br />
* , m )<br />
c, y A<br />
über unsicheren Kanal<br />
B<br />
Key Agreement:<br />
k BA = y<br />
x A B mod p B berechnen<br />
Entschlüsselung:<br />
m = E -1 (k BA<br />
* , c)
Diffie-Hellmann-Key-Exchange<br />
Berechnung des Kommunikationsschlüssels<br />
k AB bzw. k BA erfolgt durch<br />
k AB = y<br />
x B A mod p B bei A und<br />
k BA = y<br />
x A B mod p B bei B.<br />
Nachweis<br />
k AB = y B<br />
x A = (a x B) x A = (a x A) x B = y A<br />
x B = k BA (mod p B )<br />
Angreifer<br />
muß zum Brechen x A oder x B ermitteln, d.h. er muß<br />
x A = log a y A mod p B oder<br />
x B = log a y B<br />
mod p B<br />
berechnen.<br />
Sicherheit<br />
Verfahren ist sicher gegen einen passiven Angreifer.<br />
Verfahren ist unsicher gegen einen aktiven Angreifer (Maskerade).
Kryptosystem nach El Gamal<br />
basiert auf der Schwierigkeit der Berechnung des diskreten Log<br />
Schlüsselgenerierung<br />
– wähle global: • p ∈ P öffentlich<br />
• a primitive Wurzel von p öffentlich<br />
– jeder Tln. wählt: • geheimen Schlüssel k i (k i < p-1) geheim<br />
k i relativ prim zu p-1, d.h. ggt(k i ,p-1)=1<br />
• berechnet –k i mod (p-1) geheim<br />
• y i = a -k i mod p (∗) öffentlich<br />
Verschlüsselung<br />
– A will Nachricht m (m < p) an B schicken<br />
– A besorgt sich p, a, y B<br />
– A wählt Zufallszahl z (z < p)<br />
– A berechnet c = y B<br />
z · m mod p<br />
– A sendet an B: a z mod p, c<br />
A<br />
m<br />
B<br />
Entschlüsselung<br />
– B berechnet m* = (a z ) kB · c mod p<br />
Nachweis, daß m* = m<br />
m* = (a z ) kB · y B<br />
z · m mod p<br />
= (a z ) kB · (a –k B) z · m mod p mit (∗)<br />
= a z·k B · a –z·k B · m mod p mit (a m ) n =a m·n<br />
= (a z ) k B –kB · m mod p mit a m +a n =a m+n<br />
m* = m
Kryptosystem nach El Gamal: Beispiel<br />
Schlüsselgenerierung<br />
– Global öffentlich:<br />
• p = 3137<br />
• a = 577<br />
– <strong>Teil</strong>nehmer B:<br />
• k B = 1762 geheim<br />
• –k i mod (p-1) = -1762 mod 3136 = -1762 +3136 = 1374 geheim<br />
• y B<br />
= a -k B mod p = 577 1374 mod 3137 = 858<br />
Verschlüsselung<br />
– A will B vertraulich die Nachricht m = 2115 schicken.<br />
– A wählt z = 932 geheim<br />
– berechnet a z mod p = 577 932 mod 3137 = 1852<br />
z<br />
– berechnet y B mod p = 858 932 mod 3137 = 749<br />
z<br />
– berechnet c = y B · m mod p = 749 · 2115 mod 3137 = 3087<br />
– schickt a z = 1852 und c = 3087 an B<br />
Entschlüsselung<br />
– B berechnet (a z ) kB · c mod p = 1852 1762 · 3087 mod3137 = 2115
RSA-Verfahren (Rivest, Shamir, Adlemann, 1978)<br />
Schlüsselgenerierung<br />
basiert auf der Faktorisierungsannahme<br />
– wähle unabh. und zufällig p, q ∈ P mit |p| ≈ |q| und p ≠ q<br />
– berechne n = p · q<br />
– wähle c mit 3 ≤ c < Φ(n) und ggt(c, Φ(n)) mit Φ(n) = (p-1)(q-1)<br />
– berechne d mittels p, q, c als multiplikatives Inverses von c mod Φ(n)<br />
c·d ≡ 1 mod Φ(n)<br />
Konzelationssystem<br />
Signatursystem<br />
öffentl. c, n d (hier meist t genannt), n<br />
geheim d, p, g c (hier meist s genannt), p, q<br />
Anwendung<br />
– A will Nachricht m (1 < m < n) an B schicken<br />
– A besorgt sich öffentliche Parameter von B: c bzw. t, sowie n<br />
Verschlüsselung:<br />
Signatur:<br />
naiv: c(m) := m c mod n sig s (m) := m s mod n<br />
sicher: c(m) := (z, m, h(z, m)) c mod n sig s (m) := (h(m)) s mod n<br />
A<br />
c(m)<br />
B<br />
A<br />
m, sig(m)<br />
B<br />
Entschlüsselung:<br />
Signaturtest:<br />
naiv: m* = (m c ) d mod n m* = (m s ) t mod n<br />
m* = ? m' → out(ok)<br />
sicher:<br />
z*, m*, y = c(m) d mod n<br />
y = ? h(z*, m*) → out(m)<br />
h(m)* = ((h(m)) s ) d mod n<br />
h(m)* = ? h(m') → out(ok)<br />
Sicherheit<br />
Ein Sicherheitsbeweis von RSA ist bisher nicht bekannt.
RSA-Verfahren: Angriffe<br />
Passiver Angriff auf naives Signatursystem<br />
– Angenommen, Angreifer kennt zwei Signaturen m<br />
s<br />
1 und m2<br />
s sowie die<br />
Nachichten m 1 und m 2 und kann eine dritte Signatur m<br />
s<br />
3 bilden:<br />
m 3<br />
s = m1<br />
s · m2<br />
s mod n<br />
m 3 = m 1 · m 2 mod n<br />
– Denn es gilt: m 1<br />
s · m2<br />
s = (m1 · m 2 ) s<br />
– RSA besitzt multiplikative Struktur, genauer:<br />
RSA ist Homomorphismus bezüglich der Multiplikation<br />
– m 3 ist vom Angreifer jedoch nicht beliebig wählbar.<br />
Aktiver Angriff auf naives Signatursystem<br />
– Angreifer kann m 3 wählen<br />
– Angriffe nach Davida (benötigt zwei Signaturen) und Moore (benötigt<br />
nur noch eine Signatur zur selektiven Fälschung)<br />
– Angriff wird «ausgenutzt» für blinde Signaturen (Chaum 1985)<br />
Verhinderung der Angriffe<br />
– Signatur eines Hashwertes h(m) der Nachricht m<br />
– h ist eine kollisionsfreie Hashfunktion<br />
– Finden einer Kollision, d.h. h(m) = h(m*) mit m ≠ m* ist ein schwieriges<br />
Problem
RSA-Verfahren: Angriffe<br />
Raten von Klartextblöcken<br />
– Angreifer kann wahrscheinliche Klartextblöcke raten, mit c<br />
verschlüsseln und mit abgefangenen Schlüsseltexten vergleichen.<br />
Verhinderung:<br />
deterministisches<br />
Kryptosystem<br />
Zufallszahl in Klartext<br />
hineinkodieren<br />
indeterministisches<br />
Kryptosystem<br />
Aktiver Angriff zum selektiven Brechen von RSA nach Judy Moore<br />
– Angreifer möchte Schlüsseltextblock S 3 entschlüsselt haben<br />
– wählt Zufallszahl r mit 1≤ r < n<br />
– berechnet multiplikatives Inverses mod n: r -1<br />
– berechnet S 2 := S 3 · r c mod n<br />
– läßt S 2 entschlüsseln, d.h. Angreifer erhält S 2<br />
d<br />
– er weiß S 2<br />
d ≡ (S 3 · r c ) d ≡ S 3<br />
d · r c·d ≡ S 3<br />
d · r mod n<br />
– berechnet S 3<br />
d ≡ S 2<br />
d · r -1 mod n<br />
Verhinderung des aktiven Angriffs<br />
– Hinzunahme eines Redundanzprädikates, z.B. einer Zufallszahl, so daß<br />
das Multiplizieren zweier Klartextblöcke keinen dritten Klartextblock mit<br />
passender Redundanz ergibt<br />
– vor Verschlüsselung Hashwert an Nachricht anhängen
Blinde Signatur mit RSA-Verfahren<br />
Algorithmus<br />
– <strong>Teil</strong>nehmer möchte Nachricht m signiert haben, ohne daß Signierer die<br />
Nachricht m selbst zur Kenntnis bekommt<br />
– wählt Zufallszahl r mit 1≤ r < n<br />
– berechnet multiplikatives Inverses mod n: r -1<br />
– «Blendet» die Nachricht m, d.h. berechnet m ~ := m · r t mod n<br />
– läßt m ~ signieren, d.h. erhält m ~ s<br />
– er weiß m ~ s ≡ (m · r<br />
t )<br />
s ≡ m<br />
s · r<br />
t·s ≡ m<br />
s · r mod n<br />
– «Entblendet» die Nachricht, d.h. berechnet sig(m) ≡ m s · r -1 mod n<br />
Anwendung: Anonyme digitale Zahlungssysteme<br />
Signierer = Bank; Bank erfährt nichts über Zahlungsflüsse ähnl. Bargeld<br />
1. Kunde schickt «geblendete digitale Banknote» m ~ an Bank<br />
2. Bank belastet Konto des Kunden mit Gegenwert<br />
3. Bank signiert m ~ und schickt m ~ s zurück an Kunden<br />
4. Kunde «entblendet» Banknote und erhält sig(m)<br />
5. Kunde kauft bei Händler ein und bezahlt mit Banknote sig(m)<br />
6. Händler löst sig(m) bei Bank ein<br />
7. Bank prüft sig(m) auf Gültigkeit (korrekte Signatur und nicht bereits<br />
eingelöst)<br />
8. Bank schreibt Händler Gegenwert auf seinem Konto gut