29.01.2014 Aufrufe

Teil 1

Teil 1

Teil 1

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!