Skript - Arbeitsgruppe Kryptographie und Sicherheit

Transcrição

Skript - Arbeitsgruppe Kryptographie und Sicherheit
Symmetrische Verschlüsselungsverfahren
Karlsruher Institut für Technologie, SS 2014
Daniel Kraschewski und Willi Geiselmann
Skript-Ausarbeitung: Jonas Böhler
Grundlage: Datensicherheitstechnik/SCC2-Skript
16. April 2014
Inhaltsverzeichnis
1 Einführung
1.1 Analytische Angriffe gegen Kryptosysteme . . . . . . . . . . . . . . . . . .
2 Historische Kryptoverfahren
2.1 Substitution . . . . . . . . . . . . .
2.1.1 Caesar-Chiffre . . . . . . .
2.1.2 Vigenère-Chiffre . . . . . .
2.2 Permutation . . . . . . . . . . . . .
2.3 Rotorenchiffren . . . . . . . . . . .
2.3.1 Die Hagelin-Maschine C-34
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
6
6
6
7
9
10
10
3 Einführung zu Blockchiffren & Konstruktionen
12
3.1 Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2 DES (Data Encryption Standard) . . . . . . . . . . . . . . . . . . . . . . . 13
4 Meet-in-the-Middle, Slide-Attack & Related-Key-Attack
4.1 Meet-in-the-Middle gegen 2DES . . . . . . . . . . . . .
4.2 Advanced Meet-in-the-Middle gegen 2Key-3DES . . .
4.2.1 Eine Variante per Known-Plaintext-Attack . .
4.3 Slide-Attack . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Advanced Slide-Attack gegen DES-X . . . . . . . . . .
4.5 Related-Key-Attack am Beispiel LOKI89 . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
19
20
22
23
25
26
5 Lineare Kryptoanalyse
30
5.1 FEAL-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2 DES: Lineare Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6 Differentielle Kryptoanalyse
37
6.1 DES: Differentielle Kryptoanalyse . . . . . . . . . . . . . . . . . . . . . . . 37
6.1.1 Angriff gegen einen 2n-Runden-DES . . . . . . . . . . . . . . . . . 40
6.2 Skipjack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7 AES (Advanced Encryption Standard)
46
7.1 Aufbau und Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.2 Schwächen und beste bekannte Angriffe . . . . . . . . . . . . . . . . . . . 49
2
8 Betriebsmodi für Blockchiffren
8.1 ECB: Electronic Codebook Mode .
8.2 CBC: Cipher Block Chaining Mode
8.3 CFB: Cipher Feedback Mode . . .
8.4 OFB: Output Feedback Mode . . .
8.5 CTR: Counter Mode . . . . . . . .
8.6 Probleme bei schwachen Verfahren
8.7 Vergleich . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
50
50
51
52
54
55
56
56
9 Formale Sicherheitsbegriffe
58
9.1 Beziehungen zwischen den Begriffen . . . . . . . . . . . . . . . . . . . . . 60
10 Hashfunktionen
10.1 Definition und Eigenschaften . . . . . . .
10.2 Merkle-Damgard- & Feistel-Konstruktion
10.3 Äquivalenz von Krypto-Primitiven . . . .
10.4 Aufbau von SHA-1 . . . . . . . . . . . . .
10.5 Angriffsansätze gegen Hashfunktionen . .
10.5.1 Praktische Angriffe aus sinnlosen“
”
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
Kollisionen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
62
62
63
64
67
69
70
11 Nachrichten-Authentifikation
72
11.1 Message Authentication Codes . . . . . . . . . . . . . . . . . . . . . . . . 72
11.2 Abstreitbare Authentifikation . . . . . . . . . . . . . . . . . . . . . . . . . 73
3
1 Einführung
Die Grundlage für dieses Skript bildet das Vorlesungsskript [Gei09]. Sofern nicht weiter
angegeben, werden Verschlüsselungsfunktionen in Abbildungen bzw. im Text mit E für
Encryption und Entschlüsselungsfunktionen mit D für Decryption bezeichnet. Darüber
hinaus werden Klartexte als m für Message, Geheimtexte mit c für Code und Schlüssel
mit k für Key bezeichnet.
1.1 Analytische Angriffe gegen Kryptosysteme
Bei der Kryptoanalyse wird davon ausgegangen, dass der Gegner ungehinderten Zugang zum ungesicherten Übertragungssystem hat (also beliebig viel Chiffretexte empfangen kann). Ferner nimmt man an, dass das Kryptoverfahren bekannt, der Schlüssel
aber geheim ist. Die Sicherheit des Verfahrens beruht allein auf der Geheimhaltung des
Schlüssels und nicht den Details des Kryptoverfahrens; dies ist als Kerckhoffs’ Prinzip
bekannt.
Die nachfolgende Auflistung der Angriffsarten ist aufsteigend nach der Stärke des Angriffs geordnet:
Ciphertext-Only Attack Es stehen nur die abgefangenen Chiffretexte zur Verfügung.
Der Angreifer hat also Zugriff auf den unsicheren Kommunikationskanal, was stets
vorausgesetzt wird.
Known-Plaintext-Attack Es stehen bekannte Klartext-Chiffretext-Paare zur Verfügung.
Hilfreich zur Schlüsselermittlung sind unter anderem verschlüsselte Anfangs- und
Endphrasen, z. B. Mit freundlichem Gruß“. So war es für das Brechen der Enigma”
Verschlüsselung, um ein konkreteres Beispiel zu nennen, sehr nützlich zu wissen,
dass viele codierte Nachrichten, die abgefangen wurden, unter anderem ein Textfragment der Form (An das) Oberkommando der Wehrmacht“ enthielten. Da auch
”
genaue Wettervorhersagen für militärische Aktionen von Bedeutung sind, wurden
diese von Wetterstationen ebenso verschlüsselt und man konnte, sofern die Vorhersagen einigermaßen akkurat waren, ziemlich sicher sein, was der Inhalt dieser
abgefangenen Nachrichten wohl sein könnte.
Chosen-Plaintext-Attack Es stehen beliebige Klartext-Chiffretext-Paare zur Verfügung.
Man kann also selbstgewählte Klartexte verschlüsseln bzw. indirekt verschlüsseln
lassen. Dies erscheint zuerst unrealistisch, aber man kann es sich als eine Art
Black-Box-Szenario vorstellen, bei welchem der Angreifer zwar Zugriff auf ein Verschlüsselungssystem, aber nicht den Schlüssel selbst hat. Direkt kann dieser Zugriff
4
sein, falls z. B. ein Server, der bestimmte Anfragen automatisch verschlüsselt im
Spiel ist. Und indirekt könnte man z. B. das Wort Vandalismus“ verschlüsseln
”
lassen, indem man vor den Augen eines Streifenpolizisten ein öffentliches Gebäude
mit Graffiti besprüht und darauf wartet, dass er einen verschlüsselten Funkspruch
absetzt. Sollte der Polizeifunk allerdings unverschlüsselt erfolgen, hat man sich
wohl umsonst verhaften lassen.
Zu den in der Kryptoanalyse verwendeten Methoden zählen die folgenden Strategien:
• Vollständige Suche: Man durchsucht den ganzen Schlüsselraum nach dem passenden Schlüssel.
• Trial-and-Error-Methode: Man testet gewisse Möglichkeiten und überprüft diese
auf Fehlerfreiheit.
• Statistische Methoden: Häufigkeitsanalysen (z. B. Buchstaben- oder Worthäufigkeit
des Klartextes und des Chiffrats).
• Strukturanalyse von Kryptosystemem: Beispielsweise das Lösen von Gleichungssystemen.
5
2 Historische Kryptoverfahren
In der klassischen Kryptographie gibt es im Wesentlichen zwei Werkzeuge zur Transformation von Klar- in Chiffretext:
Code Ein System zur Substitution ganzer Nachrichten oder Teilen davon, Wörtern oder
Silben einer Sprache durch Wörter/Zahlenfolgen einer anderen, häufig künstlichen,
Sprache. Sie arbeiten also auf semantischen Einheiten und entsprechen gewissermaßen einem festgelegten Wörterbuch. Zu den Nachteilen zählt, dass die Transformation gleicher Klartexte zu immer gleichen Chiffren führt, man ein großes
Wörterbuch benötigt und man sich auf vorher vereinbarte Sachverhalte, für die
man Codewörter erstellt, einschränken muss.
Chiffre Ein universelles Verfahren, das eine Anzahl an Kryptooperationen (Substitution
oder Permutation) benutzt, um einen beliebigen Klartext in einen Chiffretext umzuwandeln. Einheiten fester Länge des Klartextextes werden Einheiten fester Länge
des Chiffretextalphabets zugeordnet. Man operiert auf syntaktischen Einheiten.
Die oben erwähnten Kryptooperationen zur Transformation von Klartexten in Chiffretexten werden in zwei Typen unterteilt:
1. Substitution und
2. Permutation,
welche in den nächsten zwei Abschnitten näher erläutert werden.
2.1 Substitution
2.1.1 Caesar-Chiffre
Bei der Caesar-Chiffre wird jedes Zeichen des Klartextes um den Schlüssel-Wert k im
Alphabet verschoben. Man wählte bei dieser Chiffre k = 3 fest und dadurch ergibt sich
folgende Chiffrierabbildung:


A 7→ D


..
Ek :
.
.



Z 7→ C
Dies verstößt allerdings gegen das Kerckhoffs’sche Prinzip, denn aufgrund des fest gewählten, immer gleichen Schlüssels ist der gesamte Algorithmus geheim zu halten, nicht
6
nur der Schlüssel selbst. Dennoch war diese Verschlüsselung gar nicht so schlecht, schließlich konnte damals ohnehin kaum jemand lesen.
Angriff
Um eine solche simple Substitution anzugreifen, betrachtet man die Zeichenhäufigkeit.
In der deutschen Sprache ist z. B. das E der häufigste Buchstabe, ist im Chiffrat nun
F der häufigste, so wurde mit hoher Wahrscheinlichkeit der Schlüssel k = 1 verwendet.
Und kennt man den Klartext bzw. Teile davon, kann man den Schlüssel leicht ermitteln.
2.1.2 Vigenère-Chiffre
Bei der Vigenère-Chiffre wird eine möglichst lange Schlüsselfolge (im Beispiel COVER)
anstatt eines konstanten Schlüssels wie bei der Caesar-Chiffre verwendet.
Klartext:
Schlüsselfolge:
THEMATHEMATICAL
COVERCOVERCOVER
Chiffretext:
WWARSWWARSWXYFD
(Das sich wiederholende Muster WWARS lässt hier schon ohne jegliche Information über
den Klartext auf die richtige Periode 5 schließen.)
Angriffe
Man kann verschiedene Angriffe gegen Vigenère anwenden, von denen wir einige aufzählen wollen:
• Man kann die Schlüssellänge raten/durchprobieren (es sind wahrscheinlich nur
wenige 100) und es anschließend wie Caesar brechen (siehe dazu den nächsten
Teilabschnitt).
• Die Autokorrelationsfunktion, welche die relative Häufigkeit von übereinstimmenden Stellen eines Textes mit sich selbst um einige Stellen verschoben angibt, hat
einen Peak bei der Schlüsselperiode, was hilfreich ist.
• Die Methode von Kasiski & Friedman: Der Koinzidenzindex des Chiffrats, d. h. die
Wahrscheinlichkeit, dass an zwei zufälligen Stellen eines Textes dasselbe Zeichen
steht, sinkt bei steigender Schlüssellänge. (Siehe dazu den übernächsten Teilabschnitt).
Diese Chiffre galt lange Zeit als unbrechbar ( Le Chiffre indéchiffrable“) und ist tatsächlich
”
perfekt, wenn die Schlüssellänge gleich der Länge des Klartexts ist (und man somit den
One-Time-Pad erreicht hat).
Angriff: Caesar
Hat man die Periodizität l der Schlüsselfolge erkannt, kann man Vigenère wie Caesar
brechen: Man schreibt den Chiffretext in Spalten der Länge l nebeneinander, wie es in
Abbildung 2.1 zu sehen ist, und hat in jeder Zeile eine Caesar-Verschlüsselung.
7
1 l+1
2 l+2
..
..
.
.
l
2l
· · · ← Caesar
···
..
.
···
Abbildung 2.1: Anordnung des Chiffretexts zum Brechen der Vigènere-Chiffre
Man hat allerdings nicht immer das Glück, dass gleiche Teilfolgen im Klartext mit der
gleichen Schlüssellänge verschlüsselt wurden (sind sie aber entstanden, dann ist ihr Abstand ein Vielfaches der Schlüsselperiodizität). Im allgemeinen Fall wendet man die
Methode von Kasiski und Friedman an.
Angriff: Kasiski und Friedman
Definition 2.1.1: (Koinzidenzindex): Der Koinzidenzindex Ic eines Chiffretextes c gibt
die Wahrscheinlichkeit dafür an, dass zwei unabhängig voneinander gewählte Zeichen
des Chiffretextes c gleich sind. (Sinkt bei steigender Schlüssellänge.)
Für einen Chiffretext c, der aus einer Caesar-Chiffrierung hervorgegangen ist, hängt
der Koinzidenzindex Ic nicht vom Schlüssel k, sondern lediglich von den statistischen
Eigenschaften der Klartextquelle ab. Für englische Texte gilt z. B. Ic ≈ 0, 065. Diese
Unabhängigkeit von Ic bei der Caesar-Chiffre wird für die Ermittlung der Periodenlänge,
wie unten beschrieben, ausgenutzt.
Es sei ni die absolute Häufigkeit
des Zeichens ai aus dem Alphabet A in dem Chiffretext
ni der Länge n. Dann gibt es 2 = ni (n2i −1) Möglichkeiten das Paar ai ai auszuwählen:
Ic =
≈
ni 2
n
ai ∈A 2
X
P
=
X ni 2
ai ∈A
n
− 1)
Anzahl günstiger Fälle
=
n(n − 1)
Anzahl möglicher Fälle
ai ∈A ni (ni
(für großes n)
(2.1)
(2.2)
Ordnet man den Chiffretext der Länge n wie im vorherigen Bild in l Zeilen an, dann
gilt:
1. Es gibt n( nl − 1) Möglichkeiten, Zeichenpaare in derselben Zeile auszuwählen.
(Für jedes der n Zeichen, welches man als Erstauswahl betrachtet, hat man nl − 1
verbleibende Zeichen in der gleichen Zeile, die man als Zweites auswählen kann.)
2. Es gibt n(n − nl ) Möglichkeiten, Zeichenpaare in verschiedenen Zeile auszuwählen.
Sei p die Wahrscheinlichkeit dafür, in derselben Zeile gleiche Zeichenpaare auszuwählen.
Falls die Zeilenanzahl l gleich der Periode der Schlüsselfolge ist, dann kann p durch den
P
Koinzidenzindex ai ∈A p2i approximiert werden (für genügend großes n), da hier eine
Caesar-Chiffrierung vorliegt (dabei bezeichnet pi die Wahrscheinlichkeit dafür, dass die
8
Klartextquelle das Zeichen ai aussendet). Ansonsten betrachtet man die Wahrscheinlichkeit, in verschiedenen Zeilen gleiche Zeichenpaare auszuwählen, wobei hier von einer
Gleichverteilung der Zeichen auszugehen ist (Schlüssel mit unendlicher Periode), also
P
≈ ai ∈A (1/|A|)2 = 1/|A|.
Man erhält somit als Approximation für den Koinzidenzindex:

Ic =
n
n
1
· n
−1 ·
p2i + n n −
n(n − 1)
l
l
a ∈A
X

·
i
1 
|A|
(2.3)
Also gerade die Anzahl passender Zeichenpaare (in großen Klammern) durch die Anzahl
aller möglichen Zeichenpaare.
Die Periodenlänge einer Vigenère-Chiffre bestimmt man wie folgt:
1. Berechne den Koinzidenzindex gemäß (2.1) oder (2.2).
2. Vergleiche diesen mit den ermittelten theoretischen Werten für verschiedene Werte
von l nach (2.3).
Man erhält so zwar nicht immer das korrekte l, aber der Vergleich des gemessenen“
”
Koinzidenzindex mit dem theoretisch zu erwartenden Wert gibt Aufschluss über die
verwendete Chiffre; ob es eine Permutations- oder Caesar-Chiffre oder eine VigenèreChiffre mit kleinerer oder größerer Periode ist (für kleinere steigt Ic , man nähert sich
Caesar, für größere sinkt Ic , man nähert sich dem One-Time-Pad).
Varianten
Es folgen Varianten von Vigenère, die die periodische Wiederholung des Schlüssels meiden (und somit nicht mit Kasiski und Friedman zu brechen sind):
• Man wählt einen Schlüsselanfang der Länge l und verschlüsselt die ersten l Klartextzeichen mit diesem Schlüssel. Dann wird der Klartext als Schlüssel verwendet.
• Man wählt einen sich nicht wiederholenden Text als Schlüssel. Wählt man aber
einen Text einer natürlichen Sprache, dann kann man über die relative Häufigkeit
der Zeichen dieser Sprache hochwahrscheinliche Paare von Klartext- und Schlüsselbuchstaben angeben und durch Ausprobieren Teilfolgen des Schlüssels und Klartextes bestimmen. Fehlende bzw. unsichere Buchstaben kann man durch Kontextbetrachtung gewinnen, hierbei sind Häufigkeitsverteilungen von Bigrammen,
Trigrammen, etc. sowie Einzelwortwahrscheinlichkeiten nützlich.
• One-Time-Pad: Man verwendet eine echte Zufallsfolge, die genauso lang wie der
Klartext ist als Schlüssel und verwendet diesen nur ein einziges Mal. (Die einzige
Chiffre, die perfekt sicher ist.)
2.2 Permutation
Bei der Permutation werden Texte in Blöcke fester Länge eingeteilt und die Blockinhalte
über Schlüssel permutiert.
9
Angriff
Ein Angriff kann über die Aufstellung einer Bigramm-Statistik erfolgen:
1. Rate die Blocklänge L durch vollständiges Durchprobieren, L muss dabei die Chiffratlänge teilen.
2. Schreibe das Chiffrat Zeilenweise in eine Matrix der Breite L.
3. Berechne für je zwei Spalten i, j die Wahrscheinlichkeit, dass im Klartext i direkt
vor j stand.
4. Die erste Klartextspalte hat keinen wahrscheinlichen Vorgänger“, es folgt also
”
jeweils der wahrscheinlichste Nachfolger“.
”
2.3 Rotorenchiffren
Man begann am Anfang des 20. Jahrhunderts, eine große Anzahl verschiedener Substitutionen zum Verschlüsseln zu verwenden. Und zwar wechselte man diese Substitutionen
regelmäßig nach dem Verschlüsseln eines einzelnen Zeichens. Diese große Anzahl von
Wechseln ließ sich manuell kaum noch bewerkstelligen, sodass man (elektro-)mechanische
Maschinen entwickelte, die diese Substitutionen und ihre Wechsel durchführten.
2.3.1 Die Hagelin-Maschine C-34
Die Hagelin C-34 ist eine Rotormaschine, deren Rotoren binäre Werte zurückgeben,
die durch zyklisch rückgekoppelte binäre Schieberegister beschrieben werden können.
Mit diesen Rotoren wird eine Pseudozufallsfolge generiert, mit deren Hilfe eine Vigenère-Verschlüsselung durchgeführt wird. Wie die meisten historischen Rotormaschinen arbeitet sie über den Zahlen von 0 bis 25, also über Z26 . Die Rotoren sind zyklisch
rückgekoppelte Schieberegister der Längen 17, 19, 20, 21 und 23. Da die Längen der Rotoren paarweise teilerfremd sind, ergibt sich eine Periodenlänge von 17 · 19 · 20 · 21 · 23 =
3120180. Ihre Ausgaben werden als die Binärdarstellung eines Index in eine Schlüsselliste
aufgefasst. (Der Index in die Schlüsselliste ist 5 Bit lang, welche somit 32 Werte aus Z26
enthält.) Von diesem so indizierten Wert wird der Klartext subtrahiert (Modulo 26).
Die hier verwendete Subtraktion hat den Vorteil, dass das System selbstinvers ist. Der
Schlüssel dieses Verfahrens, welches in Abbildung 2.2 zu sehen ist, wird von der Initialbelegung der Schieberegister und dem Inhalt der Schlüsselliste gebildet.
Angriff
Die Idee des Angriffs ist es nicht die exakten Einstellungen und somit den Schlüssel
dieser Maschine zu ermitteln, sondern nur äquivalente Einstellungen zu finden, die es
einem ermöglichen, Texte zu dechiffrieren.
1. Mithilfe von Klartext-Chiffrat-Paaren kann man den Schlüsselstrom erhalten, aber
der Index bleibt unbekannt.
10
2. Schreibt man ein häufig vorkommendes Zeichen am Anfang der Schlüsselliste (s[0]),
kann man z. B. die Nullerfolge als Index annehmen. Somit sind die Rotoren-Werte
gleich 0.
3. Man sucht nun nach Rotorenstellungen, in der 4 von 5 Ausgabebits bekannt sind,
vervollständigt das 5. Ausgabebit (sodass man einen neuen Index erhält) und ebenso die Schlüsselliste (indem man den Schlüssel-Buchstaben an der mometane Rotorenposition einfügt)
4. Schließlich wiederholt man den dritten Schritt bis alles vollständig ermittelt wurde.
Rotor 1
Rotor 2
Rotor 3
Rotor 4
Rotor 5
Schlüsselliste
Klartext
−
s[0]
s[1]
..
.
s[30]
s[31]
Index in die Schlüsselliste
Chiffretext
Abbildung 2.2: Struktur der Hagelin-Maschine
11
3 Einführung zu Blockchiffren &
Konstruktionen
3.1 Definitionen
Definition 3.1.1: (Blockchiffre): Gegeben seien zwei endliche Alphabete A, B und n, m ∈
N sowie ein Schlüsselraum K. Eine Blockchiffre ist gegeben durch eine Familie von injektiven Abbildungen fk : An → B m mit k ∈ K. In der Regel gilt A = B = {0, 1} und
n = m (die fk sind dann zwangsläufig bijektiv).
Blockchiffren sind meist Produktchiffren, d. h. mehrere Substitutionen (S-Boxen, von
Shannon bezeichnet als confusion“) und Permutationen (P -Boxen, diffusion“) hinter”
”
einander, da wir wissen, dass einfache Substitutions- und Permutations-Chiffren nicht
sicher sind. Bei einer Blockchiffre teilt man einen Klartext in Blöcke fester Länge ein
und chiffriert diese einzeln mit einer für alle Blöcke gleichen Verschlüsselungsfunktion.
Als sequentielle Chiffren oder Stromchiffren bezeichnet man Verschlüsselungsverfahren,
bei denen die Folge von Klartextzeichen nacheinander mit einer in jedem Schritt variierenden Funktion verschlüsselt wird. Es wird also ein Klartext mit unabhängig davon
erzeugten Schlüsselstrom (Zufall) verknüpft.
Anforderungen
Damit man auch effizient nutzbare und sichere Blockchiffren hat, müssen folgende Anforderungen gelten:
• Gegeben den Schlüssel k, muss sowohl fk als auch fk−1 effizient berechenbar sein.
• Ein Angreifer kann nicht unterscheiden zwischen einem Orakel Oi (ideal), welches
eine zufällige Injektion An → B m implementiert, und dem Orakel Or (real), welches
die gegebene Blockchiffre mit zufälligem Schlüssel implementiert. Formal lässt sich
dies über Wahrscheinlichkeiten definieren, wobei AO bedeutet, dass der Angreifer
A Zugriff auf das Orakel O hat:
|P [AOi → 0] − P [AOr → 0]| = negligible(|k|).
Hierbei gilt zu beachten, dass A polynomial beschränkt ist und wenn man eine
Funktion µ als negligible ( vernachlässigbar“) bezeichnet, bedeutet dies, dass die
”
Funktion asymptotisch schneller verschwindet als jedes Polynom. Formaler ausgedrückt sagt man, dass eine Funktion µ negligible ist, sofern gilt:
∀d ∈ N ∃x0 ∈ N ∀x > x0 : |µ(x)| < x−d .
12
Achtung: Diese asymptotische Aussage betrifft keine konkrete Schlüssellänge. Man will
das Problem eines Angriffs nämlich so allgemein wie möglich beschreiben, darum gibt
es keine exakte Angabe eines Sicherheitsparameters (z. B. einer Schlüssellänge). Es muss
nur gezeigt werden, dass der Aufwand für einen Angreifer im Vergleich zu dem Aufwand
eines Nutzers in Abhängigkeit dieses Parameters viel schneller wächst. Sollte dann ein
Sicherheitssystem gebrochen werden (z. B. aufgrund des technischen Fortschritts bei der
Rechnerentwicklung, die ein schnelleres Durchsuchen des Schlüsselraums erlaubt), kann
man einfach diesen Parameter vergrößern, um das System erneut abzusichern.
Ideal Cipher
Eine Ideal Cipher (IC) ist eine (Über-)Idealisierung einer Blockchiffre. Jedem Schlüssel
k ∈ {0, 1}λ ist eine vollkommen zufällige Permutation Pk : {0, 1}n → {0, 1}n zugeordnet
(hierbei sind λ und n Sicherheitsparameter) und per Orakelzugriff kann jede Maschine
im Modell die Funktionen Pk und Pk−1 auswerten. Die Existenz einer solchen IC wird
zur Vereinfachung von Beweisen angenommen, man spricht dann von dem Ideal-CipherModell.
Achtung: Es gibt (pathologische) Protokolle, die zwar im idealisierten IC-Modell beweisbar sicher sind, jedoch alle Sicherheit verlieren, wenn man die IC durch einen öffentlich
bekannten, volldeterministischen Algorithmus ersetzt. Der Unterschied zu Definition
3.1.1 liegt darin, dass der Angreifer den Schlüssel kennt (bzw. ihn sogar wählt).
3.2 DES (Data Encryption Standard)
Der Data Encryption Standard (DES) wurde von IBM mit Unterstützung der National Security Agency in den 70ern entworfen. Aufgrund seiner geringen Schlüssellänge
von effektiv nur 56 Bit wird er als nicht mehr sicher angesehen. Im Jahre 1998 wurde
DES durch einen 250.000$-Parallelrechner der Electronic Frontier Foundation (EFF) gebrochen, dieser durchsuchte einfach den gesamten Schlüsselraum in etwa neun Tagen.
Allerdings gibt es trotz intensiver Forschungsarbeiten keinen wirklichen Angriff, der in
der Praxis besser ist als das bloße Durchprobieren aller möglichen Schlüssel. Darum
entwickelte man verbesserte Varianten von DES, die wir am Ende dieses Abschnitts
vorstellen werden.
Die Abbildung 3.1 zeigt den groben Aufbau von DES. Am Anfang findet eine Permutation satt und am Ende wird deren inverse Permutation ausgeführt, da diese Permutationen
aber fest und bekannt sind, können sie für unsere weitere Betrachtung des DES entfallen.
Es gilt auch, dass die Ver- und Entschlüsselung aufgrund der Konstruktionseigenschaft
bis auf die (genau umgekehrte) Reihenfolge der verwendeten Teilschlüssel identisch sind.
Um genauer auf den Aufbau des DES einzugehen, müssen wir erst erklären, was man
unter einem Feistel-Netzwerk versteht. In [KL07] wird es beschrieben als eine alternative
zur Verwendung einfacher Substitutionen und Permutationen zur Erstellung von Blockchiffren. Zwar werden diese meistens auch innerhalb eines Feistel-Netzwerkes genutzt,
13
Input
64 Bit
Initiale Permutation
32 Bit
k1
L0
32 Bit
R0
F
L1
..
R1
k16
L15
R15
F
Inverse Initiale Permutation
Output
Abbildung 3.1: DES Verschlüsselungsalgorithmus
aber auf geschickte Weise miteinander verbunden, sodass für die Substitutionen nicht
mehr gelten muss, dass sie invertierbar sind. Dies ist vorteilhaft, da die Invertierbarkeit
zwangsläufig größere Struktur in das System bringt, wobei man aber von einer guten
Blockchiffre eher ein unstrukturiertes (also zufällig aussehendes) Verhalten erwartet. Ein
Feistel-Netzwerk besteht aus mehreren Runden, die gleich aufgebaut sind. In der i-ten
Runde wird die Eingabe als aus zwei Hälften Li−1 (linke Hälfte) und Ri−1 (rechte) bestehend betrachtet. Die linke Eingabehälfte für die nächste Runde, also Li , ist die rechte
Hälfte der momentanen Runde, also Ri−1 . Auf Li−1 wird noch eine Funktion F (deren
Eingabe ein Rundenschlüssel und Ri−1 sind), aufaddiert, sodass man die neue rechte
Hälfte Ri erhält. Auf die genaue Zusammensetzung dieser F -Funktion werden wir nun
eingehen.
14
F -Funktion
Die F -Funktion F (Ri−1 , ki ) erhält als Eingabe Ri−1 , die rechte Hälfte des internen Zustands nach der i − 1-ten Runde, und mit ki den Rundenschlüssel für die i-te Runde.
Der Ablauf wird nun erläutert und ist ebenso in Abbildung 3.2 zu sehen.
Ri−1
(32 Bit)
ki
Erw.
(48 Bit)
(48 Bit)
(6 Bit)
(6 Bit)
S1
...
(4 Bit)
S8
(4 Bit)
P
F (Ri−1 , ki )
Abbildung 3.2: F -Funktion
1. Zuerst sorgt die Expansion Erw.(Ri−1 ) dafür,
erweitert wird. Mit Ri−1 = (r1 , . . . , r32 ) lässt
durch
(r32 , r1 ,
r4 , r5 ,
r8 , r9 ,
r12 , r13 ,
Erw.(Ri−1 ) =
r16 , r17 ,
r20 , r21 ,
r24 , r25 ,
r28 , r29 ,
dass die Eingabe von 32 auf 48 Bit
sich diese Erweiterung beschreiben
r2 , . . .
r6 , . . .
r10 , . . .
r14 , . . .
r18 , . . .
r22 , . . .
r26 , . . .
. . . r32 ,
r5 ,
r9 ,
r13 ,
r17 ,
r21 ,
r25 ,
r29 ,
r1 ).
Eine grafische Repräsentation davon findet man in Abbildung 3.3.
2. Diese erweiterten 48 Bits werden mit dem i-ten Rundenschlüssel ki addiert, also
erhält man Erw.(Ri−1 ) ⊕ ki .
3. Je 6 Bit davon werden zu einer der acht S-Boxen geführt (diese sind Tabellen
und die Eingangsbits dienen der Indizierung), deren Ausgänge je 4 Bit liefern. Die
15
S-Boxen werden durch eine 4 × 16-Matrix beschrieben und jede Zeile stellt eine
Substitution dar. Die Substitutionen sind nichtlinear und der kryptologisch wichtigste Teil. (Die 8 Boxen mit je 4 Substitutionen liefern insgesamt 32 verschiedene
Substitutionen.)
4. Die Ausgabe der S-Boxen werden abschließend noch einer Permutation P unterworfen.
r1 r2 r3 r4
r5 r6 r7 r8
r9
...
r32 r1 r2 r3 r4 r5
r4 r5 r6 r7 r8 r9
r8 r9
Abbildung 3.3: Erweiterungsfunktion Erw.(Ri−1 ) mit Ri−1 = (r1 , . . . , r32 )
Technische Daten und Ablauf
Nach diesen Eingangsbemerkungen wollen wir nun die technischen Daten des DES genauer betrachten:
• Es wird eine Feistel-Struktur mit 16 Runden verwendet (dies ermöglicht z. B. die
Ver- & Entschlüsselung mit der gleichen Hardware).
• Die Blocklänge des DES beträgt 64 Bit, d. h. dass man mit einer Eingabe von 64
Bit arbeitet, wobei diese intern als zwei 32-Bit-Blöcke verarbeitet werden.
• Der Schlüsselraum hat eine Größe von 56 Bit (zusätzlich ergänzen 8 Paritätsbits
die acht 7-Bit-Zeichen eines Nachrichtenblocks auf ungerade Parität). Dies wurde
bereits vor Inkrafttreten des Standards als zu kurz kritisiert.
• Die Rundenschlüssel ki sind je 48 Bit groß. Es wird eine Auswahlfunktion auf
den 56-Bit-Hauptschlüssel angewendet, welche Permutationen, zirkuläre Linksshifts und Bit-Auswahlen (Selects) beinhaltet und gut umkehrbar ist.
Der Ablauf, auf den zuvor schon lose eingegangen wurde, soll hier zusammenhängend
und kompakt dargestellt werden:
1. Es erfolgt zuerst eine initiale Permutation auf der in Blöcken eingeteilten Eingabe.
2. Anschließend gibt es 16 Runden mit verschiedenen Rundenschlüsseln, wobei die
Runden funktional identisch sind:
Li = Ri−1 , Ri = Li−1 ⊕ F (Ri−1 , ki ).
Mit Li und Ri bezeichnet man wie bereits erwähnt die linken bzw. rechten Texthälften während den Verschlüsselungschritten und dies wird in Abbildung 3.1 auch
genauer erkennbar.
16
3. Abschließend findet die inverse Permutation zur initial ausgeführten statt.
Entwurfskriterien
Die Entwurfskriterien wurden erst nachträglich veröffentlicht, sodass es Befürchtungen
gab, die NSA hätte Hintertüren in die Verschlüsselung eingebaut. Heute kann man allerdings sagen, dass diese Befürchtungen (in diesem Fall) unbegründet waren. Die Kriterien
lauten:
• Keine S-Box ist eine lineare oder eine affine Funktion ihrer Eingabe.
• Die Änderung eines Eingabebits einer S-Box bewirkt eine Änderung von wenigstens
zwei Ergebnisbits.
• Die S-Boxen sind so gewählt, dass das Hamming-Gewicht des S-Box-Ergebnisses
möglichst konstant bleibt, wenn irgendein Eingabebit konstant gehalten wird.
Variationen
Der DES ist bis heute strukturell ungebrochen, aber brute force ist, wie eingangs erwähnt,
aufgrund des zu kleinen Schlüsselraums möglich. Um diesem Problem des zu kleinen
Schlüsselraums zu begegnen, wäre die naive Idee einfach einen größeren Schlüssel zu
nehmen, allerdings würde dies gegen den Standard verstoßen und DES ist bereits in vielen Hardware-Implementationen mit fester Schlüssellänge vorzufinden. Man kann aber,
wenn man den Schlüssel schon nicht vergrößern kann, einfach mehrere Schlüssel nehmen, indem man den DES z. B. verschachtelt ausführt. Diese nachfolgenden Varianten,
die alle mehr Schlüssel bieten als der ursprüngliche DES und damit den Schlüsselraum
signifikant vergrößern, sind alle praxistauglich und gelten als sicher:
Triple DES Beim Triple DES verschlüsselt man den Klartext m zuerst normal mit DES
mit einem Schlüssel k1 , anschließend entschlüsselt man dieses so erzeugte Chiffrat
mit einem Schlüssel k2 und verschlüsselt das Ergebnis davon mit einem Schlüssel
k3 , um das Triple-DES-Chiffrat c zu erhalten. Etwas formaler ausgedrückt:
C = DESk1 (DES−1
k2 (DESk3 (m)))
Die Entschlüsselung in der Mitte scheint ein wenig seltsam und hat nichts mit
Sicherheit zu tun, es ist eine praktische Überlegung. Sind nämlich alle drei Schlüssel
gleich, erhält man die normale DES-Verschlüsselung.
2-Key-3DES Der 2-Key-3DES ist im Grunde der Triple-DES, allerdings gilt k1 = k3 .
Außerdem ist der 2-Key-3DES in der Theorie nicht so sicher wie der Triple-DES.
Einen Angriff auf den 2-Key-3DES werden wir im Abschnitt 4.2 betrachten.
DES-X Beim DES-X wird nicht nur ein Schlüssel k zum Betrieb des DES verwendet,
sondern auch zwei Schlüssel kx , ky direkt auf den Klartext bzw. das DES-Chiffrat
addiert, um somit das DES-X-Chiffrat c zu erzeugen. Diese zusätzliche Addition
mit Schlüsseln wird auch als key whitening bezeichnet und soll die Struktur des
Klartextes zusätzlich verschleiern. Das Chiffrat lässt sich also beschreiben per:
c = DESk (m ⊕ kx ) ⊕ ky .
17
Einen theoretischen Angriff auf DES-X werden wir im Abschnitt 4.4 betrachten.
Frugal DES-X Der Frugal DES-X ist eine Vereinfachung von DES-X, es gilt nämlich für
die verwendeten Schlüssel kx = ky .
18
4 Meet-in-the-Middle, Slide-Attack &
Related-Key-Attack
Bei der generellen Angriffsstrategie gegen rundenweise Blockchiffren versucht man, Zwischenergebnisse zu berechnen bzw. zu approximieren, um damit einzelne Rundenschlüssel
anzugreifen. Dies kann auf verschiedene Weisen erfolgen, so versucht man z. B. in gewisser
Form beim Meet-in-the-Middle-Ansatz ein großes Problem (ein zu großer Schlüsselraum)
in mehrere kleinere zu zerlegen. Man kann aber auch die Selbstgleichheit von Verschlüsselungsrunden ausnutzen, wie dies bei den Slide-Attacks geschieht oder einen einfachen, sich wiederholenden Aufbau einer Runden- bzw. Teilschlüsselgenerierung als Ansatzpunkt wählen, wie dies bei den Related-Key-Attacks der Fall ist.
4.1 Meet-in-the-Middle gegen 2DES
Bei einem Meet-in-the-Middle-Angriff versucht man Zwischenergebnisse beim Verschlüsseln (Vorwärtsschritt) und Entschlüsseln (Rückwärtsschritt) zu finden, die gleich sind.
Für die einzelnen Schritte probiert man einfach alle möglichen Schlüssel durch (brute
force). Findet man ein passendes Zwischenergebnis, hat man sich also in der Mitte getroffen, ist es sehr wahrscheinlich, dass die per Ausprobieren gefundenen Schlüssel für
die einzelnen Schritte zusammen den gesuchten Schlüssel ergeben. Dies wollen wir nun
ausführlicher am 2DES demonstrieren. Das Chiffrat bei 2DES ergibt sich zu
c = DESk2 (DESk1 (m))
und die Struktur der Verschlüsselung ist in Abbildung 4.1 zu sehen. Es wird einfach die
DES-Verschlüsselung zwei Mal mit unterschiedlichen Schlüsseln auf den Klartext bzw.
das Zwischenergebnis ausgeführt.
m
k1
k2
E1
E2
c
Abbildung 4.1: 2DES
Würden wir nun die Zwischenergebnisse (nach E1 ) kennen, könnten wir die Schlüssel einzeln per brute force herausfinden. Auf diese Weise wollen wir nun, wie zuvor beschrieben,
die Verschlüsselung brechen.
19
Vorgehen (Known-Plaintext-Attack)
Mit den bekannten Klartext-Chiffrat-Paaren m1 , c1 und m2 , c2 kann man nun einen
Angriff ausführen. Zuerst berechnet man mit einem beliebig gewählten Schlüssel ausgehend von den bekannten Klartexten m1 , m2 mögliche Zwischenchhiffrate, führt also
nur eine einfache DES-Verschlüsselung aus. Anschließend führt man mit einem anderen Schlüssel eine Entschlüsselung der bekannten Chiffrate c1 , c2 durch. Sollten die bei
Ver- und Entschlüsselung erhaltenen Zwischenwerte identisch sein, hat man sich in der
Mitte getroffen, also die korrekten Schlüssel verwendet. Dabei benötigte man jedes Mal
nur einen Aufwand in der Größe eines einzelnen Schlüssels und nicht der Summe ihrer
Größe; man hat den Aufwand also halbiert. Man kann den Angriff algorithmisch in drei
Schritten beschreiben:
1. Vorwärtsschritt: Für alle k = 0, . . . , 256 − 1 tabelliere
[DESk (m1 ), DESk (m2 ), k]
2. Sortierschritt: Sortiere die Tabelle lexikographisch.
3. Rückwärtsschritt: Für alle k = 0, . . . , 256 − 1 berechne
−1
DES−1
k (c1 ), DESk (c2 )
und suche nach Treffern in der sortierten Tabelle per binärer Suche.
Aufwand
Es werden nur zwei Klartext-Chiffrat-Paare benötigt aber als Speicher benötigt man
ungefähr 260 Byte, also Exabyte, schnellen Speicher. Das Sortieren über FestplattenZugriffszeiten wäre viel zu langsam. Der Aufwand für die einzelnen Schritte lautet:
• Vorwärtsschritt: ≈ 2 · 256 DES-Operationen.
• Sortierschritt: ≈ 56 · 256 Vergleiche.
• Rückwärtsschritt: ≈ 2 · 255 DES-Operationen (nur 255 , da man nach der Hälfte
ungefähr fertig ist), plus ≈ 56 · 256 (Tabellen-)Vergleiche.
Eine Variante des Angriffs kommt mit weniger Speicher aus, aber das Produkt aus Laufzeit und Speicher ist im Wesentlichen konstant. Lässt man z. B. das letzte Byte in der
Tabelle weg, wird diese kleiner, man hat aber mehr falsche Treffer (false positive), die
man genau nachprüfen muss.
4.2 Advanced Meet-in-the-Middle gegen 2Key-3DES
Der DES, welcher ja schon früh für seine geringe Schlüssellänge kritisiert wurde, sollte
durch die Verwendung von zwei- bzw. sogar dreifacher Verschlüsselung sicherer gemacht
werden. Allerdings wurde in [MH81] bemerkt, dass dieser Zuwachs an Sicherheit nicht
unbedingt so groß wie erhofft ist und es wurde auch gleich ein Angriff auf den 2Key-3DES
vorgestellt. Mit einer dreifachen Ausführung des DES kann man nun keine Zwischenwerte
20
mehr direkt berechnen und vergleichen. Zur Erinnerung: Bei 2Key-3DES lässt sich die
Verschlüsselung eines Klartextes m darstellen als
c = DESk1 (DES−1
k2 (DESk1 (m)))
oder über Zwischenwerte Z1 , Z2 als
Z1 = DESk1 (m), Z2 = DES−1
k2 (Z1 ), c = DESk1 (Z2 ).
Wäre der erste Zwischenwert Z1 bekannt, könnte man den 2Key-3DES wie den 2DES
angreifen. Wie kommt man aber zu diesem Zwischenwert? Man wählt ihn einfach selbst.
Setzt man z. B. Z1 = 0 und berechnet für alle möglichen Schlüssel k nun DES−1
k (0),
erhält man alle möglichen Klartexte m k , deren erster Zwischenwert eben null wäre.
Wählt man als Angriffsart eine Chosen-Plaintext-Attack, kann man sich diese selbst
erstellten Klartexte zu den passenden Chiffraten c k verschlüsseln lassen. Die Menge aller
Klartexte m k kann man auch als die Menge aller zweiten Zwischenwerte Z2 auffassen,
da für diese die gleiche Berechnung, die DES-Entschlüsselung, durchgeführt wird. Man
rechnet die Chiffrate ci nun zu den zweiten Zwischenwerten Z2 zurück per DES−1
i (ci ).
Findet man einen Wert, der mit einem Klartext mj übereinstimmt, lauten die Schlüssel
k1 = i, k2 = j. Mit k1 = i hat man nämlich sowohl den Klartext aus dem selbst gewählten
ersten Zwischenwert Z1 als auch den zweiten Zwischenwert Z2 aus dem erfragten Chiffrat
errechnet und da die Menge der Klartexte auch die Menge der zweiten Zwischenwerte
darstellt, liefert ein übereinstimmendes mj den zweiten Schlüssel k2 = j. Diesen Angriff
wollen wir nun etwas formaler festhalten.
Vorgehen (Chosen-Plaintext-Attack)
Als erster Zwischenwert wird 0 . . . 0 gewählt. Der Angriffsablauf, mitsamt einigen im
Folgenden verwendeten Bezeichnungen, ist in Abbildung 4.2 visualisiert.
m
DES
k1
0...0
DES−1
Pj = Bi
k2
DES
ck
c
k1
Abbildung 4.2: Advanced Meet-in-the-Middle bei 2Key-3DES
1. Für alle möglichen Schlüssel k: Tabelliere Pk := DES−1
k (0 . . . 0) samt verwendetem
Schlüssel und einer Markierung Mitte“, also
”
(Pk , k, Mitte).
(Dies liefert sowohl alle zweiten Zwischenwert als auch alle Klartexte, die zu dem
ersten Zwischenwert 0 . . . 0 führen.)
21
2. Für alle k: Erfrage Chiffrate c k zu Pk .
3. Für alle k: Tabelliere
(Bk , k, Ende)
mit Bk := DES−1
k (c k ).
4. Verbinde die beiden Tabellen und sortiere diese gemeinsame Liste nach dem ersten
Feld. Nun suche zwei aufeinanderfolgende identische Einträge im ersten Feld, also
Bi = Pj aus (Bi , i, Ende) und (Pj , j, Mitte). Damit hat man einen Schlüsselkandidat der Form k1 = i, k2 = j gefunden. (Die Markierungen Mitte“ bzw. Ende“
”
”
lassen einen hierbei wissen, welcher der gefundenen Werte i, j der erste bzw. zweite
Schlüssel ist, was man natürlich ohne Markierungen einfach testen könnte).
5. Teste den Schlüsselkandidat an einigen Klartext-Chiffrat-Paaren.
Aufwand
Dieser Angriff benötigt ungefähr 256 Verschlüsselungsanfragen und hat ansonsten folgenden Ressourcenaufwand:
• Rechenaufwand: ≈ 2 · 256 DES-Operationen + ≈ 57 · 257 Sortier-Aufwand
• Speicherbedarf: ≈ 260 Byte
4.2.1 Eine Variante per Known-Plaintext-Attack
Bei einer anderen Form dieses Angriffs werden in [OW06] zufällige Werte für den Zwischenwert Z1 durchprobiert (anstatt nur Z1 = 0 . . . 0 wie zuvor zu betrachten), bis man
eine passende Wahl für Z1 getroffen hat:
1. Die als gegeben angenommenen n Klartext-Chiffrat-Paare (mi , ci ) werden in einer
Tabelle gespeichert, sortiert bzw. gehasht nach dem Klartext.
2. Wähle ein zufälliges Z1 . Für alle möglichen Schlüssel k1 :
a) Berechne m = DES−1
k1 (Z1 ).
b) Suche ein zu m passendes mi in der Tabelle, falls dies vorhanden sein sollte,
berechne Bi = DES−1
k1 (ci ) und tabelliere den Zwischenwert Bi und Schlüsselkandidat k1 in einer zweiten Tabelle.
3. Für alle k2 :
a) Berechne Pj = DES−1
k2 (Z1 )
b) Suche nach einem zu Pj passenden Bi in der zweiten Tabelle. Falls dies vorhanden sein sollte, sind die in den Tabellen gespeicherten k1 , k2 Schlüsselkandidaten.
4. Teste die Schlüsselkandidaten mithilfe der Klartext-Chiffrate-Paare auf Korrektheit. Sollte keiner gefunden werden, gehe zu Schritt 2.
22
Der Aufwand lautet dann bei n Klartext-Chiffrat-Paaren:
• Rechenaufwand: ≈ (256 ) · (264 /n) = 2120 /n [= 2120−log n ], also die Anzahl aller Schlüsselkombinationen mal der wahrscheinlichen Anzahl an zu probierenden
Werten für Z1 bis man einen Treffer erhalten sollte.
• Speicherbedarf: ≈ n
4.3 Slide-Attack
Bruce Schneier bemerkte: Except in a few degenerate cases, an algorithm can be made
”
arbitrarily secure by adding more rounds.“ Und einen solchen simplen, etwas dege”
nerierten“ Algorithmus wollen wir nun einführend analog zu [BW00] betrachten und
daran die Idee des Slide-Angriffs erklären. Ist nämlich ein solcher Angriff möglich, kann
man die Chiffre interessanterweise nicht wieder durch das bloße Hinzufügen von mehr
Runden sicher machen. Man nutzt nämlich die Selbstähnlichkeit einer Chiffre aus und
vergleicht diese mit sich selbst bei vorangeschrittener Bearbeitung (also z. B. um eine
Runde versetzt).
Gegeben sei eine Chiffre wie sie in Abbildung 4.3 zu sehen ist, bei der die gleiche Funktion mehrfach hintereinander mit gleichem Schlüssel auf dem Klartext ausgeführt wird.
Hierbei wird angenommen, dass eine Key-Recovery gegen f praktikabel ist (d. h. um den
Schlüssel k zu berechnen gilt, dass der Aufwand dafür um einiges kleiner als 2|k| ist).
m
k
k
f
f
k
...
f
c
Abbildung 4.3: Verschlüsselung mit gleichbleibender Funktion f und Schlüssel k
Idee/Ziel
Man sucht ein slid pair “, welches so heißt, da man im Bearbeitungspfad eine Stelle
”
nach rechts gerutscht“ ist. Dieses slid pair lautet:
”
(m, c), (m 0 , c 0 ) mit m 0 = fk (m), c 0 = fk (c).
Die Verschlüsselung von m zu c unterscheidet sich also von der Verschlüsselung von m 0
zu c 0 nur dadurch, dass letzteres ein Mal mehr unter dem gleichen Schlüssel bearbeitet
wird, also schon eine Runde weiter ist.
Vorgehen
1. Für je zwei Klartext-Chiffrat-Paare (m, c), (m 0 , c 0 ) berechne einen Schlüssel k, sodass m 0 = fk (m) gilt und teste, ob c 0 = fk (c) gilt.
23
2. Falls ja, wurde ein guter Kandidat gefunden (es könnte ja sein, dass ein Schlüssel
nur gerade für dieses Paar geklappt hat). Man testet nun, ob es ein false positive
ist, indem man den Schlüssel an anderen Paaren testet.
Aufwand
Bevor wir den Aufwand genauer besprechen, ist es hilfreich das Geburtstags-Paradoxon
zu erklären. Dieses besagt, dass die Wahrscheinlichkeit p, in einer Gruppe von n Personen mindestens zwei zu finden, die den gleichen Geburtstag haben, überraschend hoch
ist. Es gibt ja auch immerhin n(n − 1)/2 mögliche Paare zu betrachten. Um das Paradoxon besser zu verstehen, betrachten wir erstmal die Gegenwahrscheinlichkeit dazu.
365−(n−1)
364
Diese lautet 1−p = 365
, da die Wahrscheinlichkeit, dass die erste unter365 · 365 · · ·
365
suchte Person mit den bisherigen untersuchten keinen Geburtstag teilt 1 = 365
365 ist und
die Wahrscheinlichkeit, dass die zweite untersuchte Person keinen Geburtstag mit den
bisher untersuchten teilt, dementsprechend um einen Tag verringert ist, etc. Für n = 23
Personen gilt schließlich p ≈ 1/2. In [KL07] Appendix A.4 wird diese Wahrscheinlichkeit
p verallgemeinert, indem man q Elemente aus einer Menge von N betrachtet:
Lemma (Untere Grenze für p): Wählt man q Elemente yi , . . . , yq aus einer Menge der
Größe N (mit N fest gewählt) uniform, unabhängig und zufällig aus, dann gilt für die
Wahrscheinlichkeit p, dass es von einander verschiedene i, j mit yi = yj gibt, folgendes:
p≤
q2
.
2N
√
Lemma (Obere Grenze für p): Wählt man q ≤ 2N Elemente yi , . . . , yq aus einer
Menge der Größe N (mit N fest gewählt) uniform, unabhängig und zufällig aus, dann
gilt für die Wahrscheinlichkeit p, dass es von einander verschiedene i, j mit yi = yj gibt,
folgendes:
q(q − 1)
p≥
.
4N
Betrachtet und analysiert√man diese beiden oberen und unteren Grenzen zusammen,
zeigen diese, dass für q ≤ N , die Wahrscheinlichkeit
für eine Kollision Θ(q 2 /N ) lautet.
√
Alternativ kann man sagen, dass für q = Θ( N ) die Wahrscheinlichkeit für eine Kollision
konstant ist. Mit diesem Vorwissen, können wir nun den Aufwand besprechen:
• Es sind nach dem Geburtstags-Paradoxen bei einer Blocklänge von n Bit höchstens
ungefähr 2n/2 Klartext-Chiffrat-Paare nötig.
• Oft reichen aber auch schon weniger Paare, da man z. B. bei einer Feistel-Chiffre
mit immer demselben Rundenschlüssel zu einer Nachricht m = (L, R) ein passendes
m 0 = (R, fk (R) ⊕ L) suchen kann und der Aufwand nun nur noch ungefähr 2n/4
beträgt, da die halbe Nachricht fest ist (so kann man z. B. entweder L oder R auf
null setzen).
24
4.4 Advanced Slide-Attack gegen DES-X
In [BW00] wird ein fortgeschrittener Angriff mit der Slide-Methode vorgestellt, welcher
im Folgenden genauer erklärt wird. Beim DES-X wird nicht mehrfach verchlüsselt, so
dass zunächst eine Slide-Attack nicht einsetzbar scheint. Hängt man aber eine Ver- und
eine Entschlüsselung leicht überlappend aneinander, so ist die Technik trotzdem anwendbar. Dieses Vorgehen wird in [BW00] als twist“ bezeichnet. Das Chiffrat bei DES-X
”
lässt sich wie zuvor beschrieben darstellen als c = DESk (m ⊕ kx ) ⊕ ky und der Klartext
somit als m = DES−1
k (c ⊕ ky ) ⊕ kx .
Idee/Ziel
Man versucht slid pairs“ (m, c), (m0 , c0 ) zu finden, die die Eigenschaft c ⊕ c0 = ky
”
erfüllen. Dadurch erhalten wir eine Gegenüberstellung der Ver- und der Entschlüsselung
beim DES-X, wie sie in Abbildung 4.4 veranschaulicht wird. Für jedes slid pair gilt:
−1 0
m = kx ⊕ DES−1
k (c ⊕ ky ) = kx ⊕ DESk (c )
−1
0
m0 = kx ⊕ DES−1
k (c ⊕ ky ) = kx ⊕ DESk (c).
Daraus ergibt sich folgendes Suchkriterium für slid pairs:
−1 0
0
m ⊕ DES−1
k (c) = m ⊕ DESk (c ).
m
kx
k
E
c0
c0
ky
c
c
k
D
kx
m0
Abbildung 4.4: DES-X: Sliding with a twist“
”
Vorgehen (Known-Plaintext-Attack)
Mithilfe dieses Suchkriteriums und einer Menge von Klartext-Chiffrat-Paare (m, c), muss
man folgendes für alle Schlüssel k durchführen:
25
−1 0
0
1. Suche (m, c), (m0 , c0 ), sodass m ⊕ DES−1
k (c) = m ⊕ DESk (c ):
Sortiere die gegebenen Paare (m, c) nach dem Wert H(m ⊕ DES−1
k (c)), wobei H
eine Hashfunktion ist. (Man kann diesen Hashwert als einen Index in ein Array
ansehen, der einem angibt, wohin man das zugehörige Nachrichten-Chiffrat-Paar
speichern muss.) Passende Paare ergeben nun eine Kollision.
2. Falls eine Kollision und somit ein slid pair gefunden wurde, setze ky = c ⊕ c0
und kx = m ⊕ DES−1
k (c ⊕ ky ). Anschließend teste den Schlüssel (k, kx , ky ) auf
verschiedenen Paaren auf Korrektheit.
Aufwand
Es werden ungefähr 264/2 Klartext-Chiffrat-Paare benötigt (hierbei entsprechen die 64
Bit natürlich der DES-Blocklänge). Dies sind etwa 64 GByte, also eine mit einem üblichen
Rechner durchaus handhabbare Datenmenge. Der im Folgenden erläuterte Aufwand beträgt insgesamt viel weniger als ein Angriff per brute force und das zuvor beschriebene
Vorgehen ist darüber hinaus auch noch parallelisierbar.
• Je Schlüsselkandidat benötigt man ≈ 232 DES-Operationen (also für alle Paare)
plus ≈ 232 Sortieraufwand (normalerweise n log(n), aber für uns sind ja nur die
Kollisionen wichtig).
• Gesamt ergibt dies ≈ 288 (= 256 · 232 , wobei die 256 für brute force gegen den
Schlüssel und die 232 für die Sortierung aufgewendet werden).
4.5 Related-Key-Attack am Beispiel LOKI89
Ein Related-Key-Attack ist eine Angriffstechnik gegen Chiffren mit einer Rundenschlüsselfunktion, d. h. einer Funktion, die aus dem eigentlichen (Haupt-)Schlüssel für jede
Runde einen Teilschlüssel erstellt, die als schwach bezeichnet werden kann. Die Praxisrelevanz dieser Angriffsform zeigt sich daran, dass damit Wired Equivalent Privacy (WEP),
welches zur Verschlüsselung von WLANs verwendet wurde, gebrochen werden konnte.
In [Bih94] wird ein Angriff auf das Verschlüsselungsverfahren LOKI89 vorgestellt. Die
Idee ist die Nutzung von Selbstähnlichkeiten im Schaltbild. Aus dem Rundenschlüssel der
vorherigen Runde wird auf immer gleiche Weise (per Shift und Hälften-Vertauschung)
ein neuer erstellt. Gegeben einen Schlüssel, kann man alle Rundenschlüssel eine Runde
zurückdrehen und erhält neue, gültige Rundenschlüssel, die aus einem anderen Schlüssel
abgeleitet werden können (related keys). Dies wird in Abbildung 4.5 veranschaulicht;
hierbei vertauscht die Funktion swap“ die linke mit der rechten Hälfte der Eingabe und
”
ROL12“ führt eine Bitrotation um 12 Positionen nach links durch.
”
26
m = (ml , mr )
k = (kl , kr )
kl
k1
ml ⊕ kl
kr
m0
ROL12
F
k0
k2
u
v
u
ROL12
F
..
.
k16
0 =k
k15
16
ROL12
F
F
y
x
k10 = k2
F
..
.
..
.
v
y
x
0
k16
swap(k)
c
F
swap(k 0 )
c0
Abbildung 4.5: LOKI89 mit Rundenschlüsseln (links) und eine Runde versetzt (rechts)
LOKI89 verwendet eine Schlüssellänge von 64 Bit und eine Blocklänge von 64 Bit. Die
ersten beiden Rundenschlüssel ergeben sich aus dem Hauptschlüssel k = (kl , kr ) per
(k1 , k2 ) = (kl , kr ).
Die restlichen Rundenschlüssel der Runden 3 bis 16 erhält man für die i-te Runde folgendermaßen:
ki = ROL12 (ki−2 ).
Alle gerade Runden haben Rundenschlüssel, die sich Bits teilen (bzw. eine gemeinsame
Vergangenheit haben), ebenso alle ungeraden.
27
Für ein slid pair bei LOKI89 gelten folgende Gleichungen (wobei die farbigen Kreise
u, v, x, y Verweise auf die Abbildung 4.5 sind). Der Schlüssel k wird, wenn man ihn nach
einer Runde der Rundenfunktion betrachtet, zu folgendem Wert:
k 0 = (kr , ROL12 (kl ))
(4.1)
Die linke und rechte Hälften des Klartextes sind nach einer Runden mit Schlüssel k
identisch zu denen nach der initialen Schlüsseladdition mit Schlüssel k 0 (also vor der
ersten Runde), nämlich:
m0 ⊕ k 0 = (mr ⊕ kr , ml ⊕ kl ⊕ F (mr ⊕ kr ⊕ kl )
| {z } |
{z
u
(4.2)
}
v
Analog gilt diese Beziehung bezüglich der Chiffrate:
c0 ⊕ swap(k 0 ) = (cr ⊕ kl ⊕F (cl ⊕ kr ⊕ kl ), cl ⊕ kr ))
| {z }
(4.3)
| {z }
y
x
Vorgehen ( Chosen Key Chosen Plaintext“-Attack)
”
Die simple, selbstähnliche Rundenschlüsselfunktion ermöglicht einen Angriff über die
Beziehung von Rundenschlüsseln mithilfe der zuvor vorgestellen Gleichungen. Es gilt
zu bemerken, dass bei einer Chosen-Key-Attack die Relationen zwischen unbekannten
Schlüsseln und nicht die Schlüssel selbst gewählt werden; letzteres wäre natürlich trivial.
1. Wähle k 0 = (kr , ROL12 (kl )). k 0 entspricht also k um eine Runde weitergeschaltet.
2. Wähle 216 zufällige Klartexte m mit gleicher rechter Hälfte (m = (∗, m)).
Wähle 216 zufällige Klartexte m0 mit derselben linken Hälfte (m0 = (m, ∗)).
(Es reichen 216 , da man die Hälfte des Klartextblocks gleich lässt (64/2 = 32) und
noch das Geburtstagsparadoxon verwendet (32/2 = 16).)
3. Erfrage 216 Chiffrate c = Enck (m) und analog c0 = Enck0 (m0 ).
4. Suche m, m0 , sodass cl = c0r gilt. Dies ist eine notwendige Voraussetzung für ein
slid pair nach (4.3).
5. Suche kr ⊕ kl , sodass
m0r ⊕ c0l = ml ⊕ F (mr ⊕ kr ⊕ kl ) ⊕ cr ⊕ F (cl ⊕ kr ⊕ kl ).
Mit den Gleichungen (4.1), (4.2) und (4.3) erhält man eine Verbindung von den
zwei Klartexten und Chiffraten des slid pairs. Addiert man diese wie oben, ist die
einzige Unbekannte kr ⊕ kl .
6. Berechne k = (kl , kr ) mittels eines LGS durch (4.1), (4.2)
28
Aufwand
Das Geburtstagsparadoxon besagt, dass mit einer signifikante Wahrscheinlichkeit ein slid
pair existiert und die Wahrscheinlichkeit für ein false positive in Schritt 4 beträgt jeweils
ungefähr 1/232 . Weitere Aufwände sind:
• 217 Verschlüsselungsanfragen (Schritt 3)
• ≈ 216 für Suche nach slid pair (Schritt 4)
• ≈ 232 für Bestimmung von kr ⊕ kl . (Dies wäre schneller mittels einer DifferenzTabelle für F durchführbar, wie wir sie im Abschnitt 6 kennen lernen werden.)
29
5 Lineare Kryptoanalyse
Bei der linearen Kryptoanalyse wird versucht, lineare Abhängigkeiten innerhalb des Verschlüsselungssystems zu finden bzw. Annäherungen daran, die vielleicht sogar nur mit
einer gewissen Wahrscheinlichkeit gelten. Diese Abhängigkeiten bzw. Approximationen
werden wir im Folgenden als lineare Approximation bezeichnen. Zuerst werden dazu
statistische lineare Beziehungen zwischen den Eingabe- und Ausgabebits der inneren
Funktionen aufgestellt, z. B. jeder S-Box. Diese Beziehungen werden kombiniert und auf
den gesamten Algorithmus ausgeweitet, um eine lineare Approximation des gesamten
Algorithmus ohne Zwischenwerte zu erhalten.
5.1 FEAL-4
Aufgrund der Bedenken bezüglich der Sicherheit von DES kam es zur Entwicklung verschiedener alternativer Kryptosysteme, welche den DES in Sicherheit und Geschwindigkeit übertreffen sollten. Eine dieser Entwicklungen ist der Fast Encryption Algorithmus (FEAL), welcher von den Japanern A. Shimizu und S. Miyaguchi bei dem japanischen Unternehmen NTT entwickelt wurde und in seiner ersten Fassung vier Verschlüsselungsrunden verwendet, warum man ihn auch FEAL-4 nennt. Zwar ist FEAL-4
wirklich schneller als der DES, allerdings wurde schon im gleichen Jahr, in dem der
Algorithmus bei der EUROCRYPT’87 öffentlich vorgestellt wurde, ein starker Angriff
veröffentlicht. Wir wollen uns nun der Beschreibung des Aufbaus von FEAL-4 widmen.
Abbildung 5.1 zeigt den Aufbau von FEAL-4, welcher wie DES eine Feistel-Struktur
aufweist und Abbildung 5.2 zeigt die F -Funktion, welche in jeder der vier Runden aufgerufen wird. Dabei verschieben die darin befindlichen S-Boxen S0 , S1 die modulo 256
addierten Eingaben zyklisch um zwei Bits nach links, genauer:
Si (A, B) = ROL2 (A + B + i mod 256).
Der 64-Bit-Schlüssel wird zu 4 Rundenschlüsseln mit jeweils 16 Bit umgewandelt, mithilfe von XOR- und Vertauschungsoperationen. Bezüglich der F -Funktion konnte man
sehr starke Abhängigkeiten zwischen den Ein- und Ausgabebits herstellen: Eine lineare
Charakteristik gibt dabei an, dass die Parität einer bestimmten Menge von Eingabebits
und Ausgabebits mit einer bestimmten Wahrscheinlichkeit gerade ist. Bei S0 (A, B) ist
die Parität der Eingabebits A[0], B[0] (hierbei gibt A[0] das erste Byte von A an) und
des Ausgabebits S[2] immer gerade, bei S1 dementsprechend ungerade. Hiermit kann
30
ml
mr
32 Bit
k1
L0
F0
F
16 Bit
B0
R0
B1
R1
B2
R2
B3
R3
k2
L1
F1
F
k3
L2
F2
F
k4
L3
F3
F
cl
cr
Abbildung 5.1: Struktur von FEAL-4
eine lineare Approximation der gesamten F -Funktion realisiert werden (die Auflistung
erfolgt von der obersten S-Box mit Eingang B[0..7] zur untersten):
F [2] = B[0] ⊕ F [8]
(5.1)
F [10] = 1 ⊕ B[0] ⊕ B[8] ⊕ k[0] ⊕ B[16] ⊕ B[24] ⊕ k[8]
(5.2)
F [18] = F [8] ⊕ B[16] ⊕ B[24] ⊕ k[8]
(5.3)
F [26] = 1 ⊕ F [16] ⊕ B[24]
(5.4)
In den Gleichungen (5.2) und (5.3) geht der Schlüssel ein, dieser ist zwar unbekannt
aber fest. Also versucht man alle Schlüssel per brute force, schaut ob die Parität konstant bleibt (somit wäre ein Schlüsselkandidat gefunden) oder nicht. Diese Charakteristik
für F können zu Charakteristiken für die ersten drei Runden erweitert werden. In Abbildung 5.3 (b) ist eine mögliche erweiterte Charakteristik samt Herleitung angegeben. Die
31
F [0..7]
8 Bit
B[0..7]
S0
k[0..7]
S1
F [8..15]
B[8..15]
S0
F [16..23]
B[16..23]
k[8..15]
F [24..31]
S1
B[24..31]
Abbildung 5.2: F -Funktion von FEAL-4
Struktur von FEAL-4 ist zum leichteren Nachvollziehen der Herleitung direkt gegenüber
gestellt.
Diese Analyse der F -Funktion kann man zu einer Analyse von mehreren Runden erweitern: Sei für gegebene Indexmengen X, Y, Z die Parität B[X] ⊕ F [Y ] ⊕ K[Z] = c, also
konstant. Verwendet man diese Gleichung in der ersten und dritten Runde und berechnet damit R1 [Y ] einmal aus den Eingängen (ml , mr ) und einmal aus den Ausgängen der
dritten Runde (L3 , R3 ), so ergibt sich:
ml [X, Y ] ⊕ mr [X] ⊕ k1 [Z] ⊕ c = ml [Y ] ⊕ R0 [X] ⊕ k1 [Z] ⊕ c
1)
= L0 [Y ] ⊕ F0 [Y ]
= R1 [Y ]
= R3 [Y ] ⊕ F2 [Y ]
2)
= R3 [Y ] ⊕ R2 [X] ⊕ k3 [Z] ⊕ c
= R3 [Y ] ⊕ L3 [X] ⊕ k3 [Z] ⊕ c.
(Hierbei stellte man bei 1) einfach R0 [X] ⊕ F0 [Y ] ⊕ k1 [Z] = c nach F0 [Y ] um und bei 2)
R2 [X] ⊕ F2 [Y ] ⊕ k3 [Z] = c nach F2 [Y ].)
Dies liefert die Gleichung für drei Runden:
ml [X, Y ] ⊕ mr [X] ⊕ R3 [Y ] ⊕ L3 [X] = k1 [Z] ⊕ k3 [Z] .
|
{z
}
Schlüssel konstant
Attacke (Known-Plaintext-Attack)
Wie zuvor besprochen kann man aufbauend von einer einfachen Analyse der Ein- und
Ausgabebits des Inneren von FEAL-4, also der F -Funktion, eine Analyse über drei Runden erstellen. Wobei man dies aufgrund der symmetrischen Struktur jeweils ausgehend
32
ml
L0
mr
F0
F
F0 [2] = B0 [0] ⊕ F0 [8]
R0
B0
ml [0] ⊕ mr [0]
L1
F1
L2
F2
L3
F3
F
F
F
R1
B1
ml [2] ⊕ R1 [2]
B2
R2
B3
R3
R3 [2] ⊕ F2 [2]
ml [8] ⊕ R1 [8]
R3 [8] ⊕ F2 [8]
B2 [0] ⊕ F2 [8]
R2 [0]
cl
cr
(a) FEAL-4-Struktur
⇒ ml [0, 2, 8] ⊕ mr [0] ⊕ R3 [2, 8] ⊕ R2 [0] = 0.
(b) Herleitung einer erweiterte Charakteristik
Abbildung 5.3: FEAL-4: Struktur und Charakteristik
vom Klartext (Verschlüsselung) oder vom Chiffretext (Entschlüsselung) betrachten kann.
Mit diesem Vorwissen ist nun eine Known-Plaintext-Attack auf den vierten (bzw. den
ersten) Rundenschlüssel möglich:
1. Verschlässle einige Klartexte mit FEAL-4.
2. Für jeden Schlüssel k4 :
a) Rechne alle entsprechenden Chiffrate zurück zum Zwischenergebnis nach der
3. Runde.
b) Falls die drei Runden Gleichung nicht bei allen Klartext- / Zwischenergebnissen gleich sein sollte, verwerfe den Schlüsselkandidat.
3. Wiederhole den Vorgang mit verschiedenen Charakteristiken, bis nur noch wenige
Kandidaten für k4 übrig sind.
4. Führe einen analogen Angriff gegen k1 durch.
5. Finde k2 und k3 mittels brute force. (Wenn k1 und k4 komplett bekannt sind, sind
diese Schlüssel auch direkt berechenbar durch die Struktur der S-Boxen.)
Aufwand
Nach dieser etwas längeren Erläuterung des FEAL-Aufbaus und des Angriffs, kommen
wir zu einer recht kurzen Aufwandsanalyse:
33
• Man benötigt ≈ 16 Klartext-Chiffrat-Paare (besser sind aber ≈ 20, damit k1 , k4
komplett durch lineare Analyse rekonstruierbar wird).
• Der Rechenaufwand beträgt ≈ 216 (dominiert durch vollständige Suche von k1 , k4 ).
5.2 DES: Lineare Analyse
Die S-Boxen bei DES sind keine linearen Funktionen. Es gibt aber Charakteristiken,
welche mit hoher Wahrscheinlichkeit gelten. Die stärkste Abweichung gibt es bei S5 mit
einer Wahrscheinlichkeit p = 12/64 = 0.1875. Damit lässt sich analog zur linearen Analyse von FEAL-4 eine Known-Plaintext-Attack auf den 4-Runden-DES durchführen; bei
Schritt 2 wird dann jeweils geprüft, ob die Statistik stimmt (d. h. ob die Gleichung im
richtigen Verhältnis ”k1 [Z] ⊕ k3 [Z] = 1ünd ”k1 [Z] ⊕ k3 [Z] = 0”liefert – die Wahrscheinlichkeit für einen der Ausgänge ist: p2 + (1 − p)2 ).
Ist eine Charakteristik für 2n + 1 Runden und dazu eine passende lineare Approximation
der F -Funktion bekannt, so lässt sich damit eine Charakteristik für 2n + 3 Runden
konstruieren (es seien X, Y, Z Indexmengen): Mit der gegebenen lineare Approximation
der Ein- und Ausgänge der F -Boxen
F [Y ] ≈ R[X]
(5.5)
L1 [Z] ⊕ R1 [Y ] ≈ L2n [Y ] ⊕ R2n [Z]
(5.6)
und der gegebenen Charakteristik
erhält man die neue Charakteristik
L0 [Y ] ⊕ R0 [X, Z] ≈ L2n+1 [X, Z] ⊕ R2n+1 [Y ].
(5.7)
(1-Runden-Charakteristiken sind trivial, da immer gilt Ri = Li+1 .)
Die Herleitung der neuen Charakteristik soll hier genauer betrachtet werden. Ausgehend
von der gegebenen Charakteristik (5.6) kommt man (mithilfe der linearen Approximation
(5.5)) zur linken Seite der neuen Charakteristik (5.7):
L1 [Z] ⊕ R1 [Y ] = R0 [Z] ⊕ R1 [Y ] = R0 [Z] ⊕ L0 [Y ] ⊕ F0 [Y ]
(5.5)
≈ R0 [Z] ⊕ L0 [Y ] ⊕ R0 [X] = R0 [X, Z] ⊕ L0 [Y ].
Dies kann man sich auch mithilfe der Abbildung 5.4 verdeutlichen. Analog kann man
zur rechten Seite von (5.7) kommen:
L2n+1 [X, Z] ⊕ R2n+1 [Y ] ≈ L2n [Y ] ⊕ R2n [Z].
Nun muss man beide Seiten nur noch mithilfe der gegebenen Charakteristik (5.6) verbinden, um zur neuen Charakteristik (5.7) zu gelangen.
34
L0
F0
L1
L2n+1
R0
F
..
F2n+1
R1
R2n+1
F
Abbildung 5.4: DES-Aufbau
Erfolgswahrscheinlichkeit
Gilt die lineare Approximation (5.5) mit Wahrscheinlichkeit p und die Charakteristik
(5.6) mit Wahrscheinlichkeit q, dann gilt die neue Charakteristik (5.7) mit Wahrscheinlichkeit
p2 q + (1 − p)2 q + 2p(1 − p)(1 − q).
Die einzelnen Summanden dieses Ausdruck wollen wir kurz erläutern:
• p2 q: Das Quadrat ergibt sich, da man die lineare Approximation (5.5) zwei Malverwendet hat, einmal für die linke und einmal für die rechte Seite, und q taucht
auf, da man die Charakteristik (5.6) zum Verbinden verwendete.
• (1 − p)2 q: Wenn beides gleich“ falsch ist, gilt natürlich die umgekehrte Parität,
”
was aber genauso nützlich ist.
• 2p(1 − p)(1 − q): Man hat hier den Faktor 2 stehen, da entweder die erste oder
zweite Approximation falsch gewesen sein können. War eine der Approximationen
falsch, ändert sich das Bit, ist aber auch die Charakteristik falsch, wird die (falsche)
Charakteristik erfüllt, gilt also.
Lemma (Piling-up Lemma): Es seien Xi mit i ∈ {1, . . . , n} unabhängige Zufallsvariablen, die den Wert 0 mit der Wahrscheinlichkeit pi und den Wert 1 mit Wahrscheinlichkeit
1 − pi annehmen. Dann gilt:
n
Y
1
1
P [X1 ⊕ · · · ⊕ Xn = 0] = + 2n−1
pi −
.
2
2
i=1
Man kann nun zu dieser Folgerung aus dem Piling-up Lemma kommen: Eine (2n + 1)Runden-Charakteristik, basierend auf n linearen Approximationen, welche jeweils mit
35
Wahrscheinlichkeit pi gelten, hat etwa folgende Wahrscheinlichkeit:
n
Y
1
1
+ 22n−1
pi −
2
2
i=1
2
.
Achtung: Diese Approximationen sind natürlich aufgrund des Aufbaus von DES und den
Zusammenhängen zwischen den einzelnen Runden und Zwischenwerten nicht wirklich
statistisch unabhängig!
Und gilt für alle linearen Approximationen die Abschätzung min(pi , 1 − pi ) > , so ist
der Vorteil einer linearen Analyse sogar vernachlässigbar in der Rundenzahl, denn es
gilt:
2n
1
1
1 1
q < + 22n−1
−
= + (1 − 2)2n .
2
2
2 |2
{z
}
vernachl. in n
Aufwand
Für die lineare Analyse eines 16-Runden-DES werden ca. 247 Klartext-Chiffrat-Paare
benötigt. Damit können 14 der 56 Schlüsselbits gefunden werden. Die verbleibenden
42 Bit des Schlüsels könen dannn durch vollständige Suche ermittelt werden. Dieser
Angriff ist somit natürlich deutlich schneller als ein bloßer Angritt per brute force gegen
den vollen Schlüssel.
36
6 Differentielle Kryptoanalyse
Bei der differentiellen Kryptoanalyse betrachtet man nicht die verschiedenen Klar- und
Chiffretexte, sondern betrachtet und tabelliert bestimmte Differenzen, meistens per XOR
ermittelt, der Klartexte, welche mit einer Wahrscheinlichkeit p zu bestimmten Differenzen der Chiffretexte führen. Für diese Wahrscheinlichkeit p muss gelten, dass sie größer
ist, als man es von einer zufälligen Permutation erwarten würde, sodass man aus den
Differenzen wichtige Informationen bezüglich des Schlüssels gewinnen kann. Diesen etwas abstrakteren Ansatz wollen wir anhand eines Beispiels für den DES im nächsten
Abschnitt veranschaulichen.
6.1 DES: Differentielle Kryptoanalyse
Die Grundidee bei der differentiellen Kryptoanalyse des DES ist, dass der Schlüssel hier
in den einzelnen Runden auschließlich per XOR eingeht und sich dadurch die Differenzen von Zwischenergebnissen nicht ändern, man diese also unabhängig vom Schlüssel
betrachten kann. Man tabelliert nun die möglichen Eingangspaare bei gegebenen Einund Ausgangsdifferenzen bezüglich der S-Boxen in einer Differenztabelle. Erhält man
bestimmte Ausgabedifferenzen der S-Boxen (also mehrere Ausgaben, die man paarweise
addieren kann), kann man in der Tabelle nachsehen, welche Differenzen wohl welche Eingabepaare benötigt und daraus, wie im Folgenden erläutert, den Schlüssel gewinnen. Die
Abbildung 6.1 verdeutlicht die Differenzbildung anhand des Signalflusses der S-Boxen
(die Differenztabelle wird mit Diff.“ abgekürzt). Hierbei erweitert die Funktion Erw. die
”
4 Eingangsbits von m1 bzw. m2 auf bekannte Weise zu 6 Bits e1 bzw. e2 und jede S-Box
korrespondiert zu 6 Schlüsselbits k. Dadurch erhalten wir als Eingang zu den S-Boxen
sin,1 = e1 ⊕ k
bzw. sin,2 = e2 ⊕ k
und die Ausgänge nennen wir dementsprechend sout,1 und sout,2 . Addiert man diese
Gleichungen zusammen, erhält man die Differenz der S-Box-Eingaben per
s0in = e0 = e1 ⊕ e2 = E(m1 ) ⊕ E(m2 ) = E(m0 ) = E(m1 ⊕ m2 )
und die Differenzen der Ausgänge der S-Boxen lauten
s0out = sout,1 ⊕ sout,2 .
Die S-Boxen lassen sich dann als Differenz-Tabellen darstellen, deren Aufbau beim Angriff auf den 1-Runden-DES etwas formaler erklärt wird. So erhält man einen vom
37
m1
m0 = m1 ⊕ m2
m2
Erw.
Erw.
⊕
e1
e2
k
sin,1 = e1 ⊕ k
Erw.
=
k
sin,2 = e2 ⊕ k
S
S
sout,1
e0 = e1 ⊕ e2
= E(m1 ) ⊕ E(m2 ) = E(m0 )
s0in = e0
Diff.
s0out = sout,1 ⊕ sout,2
sout,2
Abbildung 6.1: Differenz von Zwischenergebnissen bei DES-S-Boxen
Schlüssel k unabhängigen Signalfluss (e0 = s0in ). Da wir von einer Known-PlaintextAttack ausgehen werden, sind alle Texte bis auf sin,1 und sin,2 bekannt.
Attacke: 1-Runden-DES
Um bei gegebenen Differenzen m0 und s0out die Werte für die Eingänge der S-Boxen
sin,1 , sin,2 zu ermitteln, erstellt man zu jeder S-Box eine Differenz-Tabelle, die die möglichen Kombinationen dafür enthält. Jede Zeile i dieser 64 × 16-Tabelle entspricht einer
Eingangsdifferenz m0 = i. In der Spalte j sind alle Paare sin,1 , sin,2 eingetragen, die zu
einer Ausgangsdifferenz s0out = j führen. Ist ein Paar gefunden, das den vorgegebenen
Differenzen entspricht, so kann man k berechnen:
sin,1 = e1 ⊕ k
⇒
k = sin,1 ⊕ e1 .
So erhält man meist nur eine Menge von Schlüsseln, benutzt man aber mehrere Textpaare und nimmt die Schnittmenge der Schlüssel-Mengen, kann man diese Menge immer
stärker einengen.
Attacke: 2-Runden-DES
Man kann den 1-Runden-Angriff leicht auf einen 2-Runden-Angriff erweitern, da die
einzelnen Runden separat angegriffen werden können. Die Ein- und Ausgangspaare (sin ,
sout ) berechnen sich zu (mr , ml ⊕ cl ) bzw. (cl , mr ⊕ cr ) für die erste und zweite Runde
wie die Abbildung 6.2 es veranschaulicht.
Attacke: 3-Runden-DES
Das Problem bei einer Erweiterung auf 3 Runden ist, dass man in keiner Runde Einund Ausgangspaare der F -Funktion direkt berechnen kann. Die Lösung lautet nun, dass
(1)
(1)
man für die dritte Runde eine Chosen-Plaintext-Attack mit Klartexten m1 = (L0 , R0 )
38
k1
ml
mr
F
k2
F
cl
cr
Abbildung 6.2: 2-Runden-DES
L0
L1
L2
F0
F1
F2
k1
R0
k2
R1
k3
R2
F
F
F
L3
R3
Abbildung 6.3: 3-Runden-DES
(2)
(2)
und m2 = (L0 , R0 ) mit gleichbleibender rechter Hälfte benutzt. Die Abbildung 6.3
erleichtert die Zuordnung der im Folgenden verwendeten Bezeichnungen.
Die Eingänge der letzten F -Boxen als Differenzen lauten mit den gegebenen Klartexten
(1)
(2)
(1)
(2)
(1)
(1)
(2)
(2)
(2)
(2)
(2)
R20 = R2 ⊕ R2 = L3 ⊕ L3
und die Ausgänge sind
(1)
F20 = F2
(2)
⊕ F2
= R3 ⊕ L2 ⊕ R3 ⊕ L2
(1)
(1)
(1)
(1)
(1)
(2)
= R3 ⊕ L0 ⊕ F0
⊕ R3 ⊕ L0 ⊕ F0
(2)
= R3 ⊕ L0 ⊕ R3 ⊕ L0 .
Die letzte Umformung gilt, da wir gleiche rechte Hälfte beim Klartexte gewählt haben
(1)
(2)
und somit F0 ⊕ F0 = 0 erfüllt ist. Die ersten zwei Runden kann man wie zuvor
39
angreifen und die dritte durch die oben angegebenen Ein-/Ausgangs-Differenzen wie die
erste Runde.
6.1.1 Angriff gegen einen 2n-Runden-DES
Bei der Übertragung der differentiellen Kryptoanalyse auf größere Rundenzahlen, gelangt man zu einem probabilistischen Schema. Es gibt bestimmte Eingangsdifferenzen,
die sich mit hoher Wahrscheinlichkeit nach einer 2-Runden-DES-Verschlüsselung wiederfinden, Charakteristiken genannt. Man benötigt Charakteristiken, die über 2 Runden
mit großer“ Wahrscheinlichkeit stabil bleiben. Ein Beispiel hierfür enthält die Abbildung
”
6.4.
Wkt. = 1
19600000
0...0
0..0
F
0..0
00000000
1960..0
1960 . . . 0
1/234
0..0
F
1960 . . . 0
0...0
Abbildung 6.4: 2n-Runden-DES
Vorgehen (Chosen-Plaintext-Attack)
Mithilfe der Charakteristiken und der Annahme, dass diese bei passender Ein- und Ausgangsdifferenz auch wirklich erfüllt sind, kann man einen Angriff vornehmen:
1. Erfrage Chiffrate zu Klartext-Paaren mit Differenz entsprechend der Charakteristik.
2. Verwerfe Tupel mit unpassender Ausgangsdifferenz.
3. Führe 1-Runden-Angriff (wie zuvor) gegen die letzte Runde aus, mit der Annahme,
dass dort die Charakteristik erfüllt war (dies führt zu 18 Bits des letzten Rundenschlüssels). Achtung: Möglicherweise wird kein Schlüsselkandidat für alle Tupel
passen, also erfolgt ein Mehrheitsentscheid.
4. Man verwendet brute force gegen die restliche 38 Schlüsselbits.
Wahrscheinlichkeit
Die fünf rechten S-Boxen liefern bei der stabilen Charakteristik 19600000 die Differenz
0 (20 Bit), die linken drei S-Boxen liefern beliebige Werte (12 Bit). Die Wahrscheinlichkeit, dass alle 12 Bit gleich 0 sind lautet bei Gleichverteilung 2−12 . Aber mit unserer
40
Charakteristik 1/234, also ungefähr 16 Mal häufiger als bei beliebiger Charakteristik
XXX00000.
Aufwand
Die benötigte Ausgangsdifferenz tritt bei einer Rundenzahl von 2n etwa einmal pro
234n Klartext-Paaren auf. Die Wahrscheinlichkeit, dass die Charakteristik zwei Runden
überlebt lautet 234−1 , somit beträgt sie für 16 Runden natürlich 234−8 . Aufgrund von
2348 ≈ 263 ist die differentielle Kryptoanalyse damit nicht praxisrelevant für DES, da
brute force schon mit 256 möglich ist. Für Verfahren mit weniger Runden, z. B. FEAL-8,
ist sie aber absolut relevant.
6.2 Skipjack
Skipjack wurde gegen Ende der 80er bzw. Anfang der 90er von der NSA unter Geheimhaltung entwickelt, scheiterte allerdings politisch und wurde schließlich 1998 veröffentlicht.
Der Einsatzzweck war der CLIPPER-Chip zur Sprachverschlüsselung. Es wurde auch
Key Escrow betrieben, d. h. der Schlüssel wurde hinterlegt und unter Umständen Dritten zugänglich gemacht, sodass z. B. die Regierung die Kommunikation abhören konnte.
Gegen eine in der Rundenzahl reduzierte Version dieser Blockchiffre werden wir nach der
Beschreibung des Aufbaus einen Angriff erläutern. Allerdings werden wir hier nicht wie
bei der üblichen differentiellen Analyse die überdurchschnittlich auftretenden Differenzen ausnutzen, sondern die selten bzw. gar nicht möglichen Paare. Schlüssel, bei denen
solche unmöglichen Differenzen entstehen, können wir somit ausschließen und dadurch
die Menge an zu betrachtenden Schlüssel immer weiter einschränken.
Aufbau
Der Aufbau von Skipjack lässt sich grob wie folgt charakterisieren:
• Vier 16-Bit-Worte w1 , . . . , w4 (also 64 Bit) werden mit einem 80-Bit-Schlüssel in
32 Runden mit jeweils einem 32-Bit-Teilschlüssel verschlüsselt.
• Die 32 Runden haben folgenden Aufbau: 8 Mal wird Regel A angewendet (siehe
Abb. 6.5), anschließend 8 Mal Regel B (siehe Abb. 6.6) und erneut 8 Mal Regel A
und 8 Mal Regel B.
• Durch das Addieren des Rundenzählers bei den Regeln wird verhindert, dass man
z. B. 2-Runden-Charakteristiken wie bei DES verwenden kann (da sich auch bei
gleicher Eingabe die Runden unterschiedlich verhalten).
41
w1
w2
G
w3
w4
Zähler
Abbildung 6.5: Regel A
w1
G
w2
w3
w4
Zähler
Abbildung 6.6: Regel B
Der Ablauf von Skipjack kann auch in einer anderen Form dargestellt werden, wie es in
Abbildung 6.7 zu sehen ist: Hier ist das Schieberegister durch einen Signalfluss ersetzt
worden, sodass die jeweiligen Ergebnisse der Runden nur alle vier Takte direkt mit
dem Registerinhalt der ursprünglichen Darstellung übereinstimmen. Ansonsten sind die
Zwischenergebnisse gegenüber den Inhalten der Register verschoben“.
”
Die Rundenfunktion G, die bei den Regeln A und B verwendet wird, besteht aus einer Feistelchiffre mit vier Runden, bei der die jeweiligen Teilschlüssel zum Signalfluss
per XOR addiert werden. Die Rundenfunktion F von G realisiert eine bijektive 8-BitSubstitution. Das Problem ist der Übergang von Regal A zu Regel B. Normalerweise
überlebt“ ein 16-Bit-Wort nur drei Runden, hier bleibt w4 aber sieben Runden nahe”
zu unverändert. Tabelle 6.1 zeigt diesen problematischen Regelübergang anhand eines
Beispiels.
Runde (Regel)
7 (A)
8 (A)
w1
G(w1 ) ⊕ w4 ⊕ 7
9 (B)
w3
16-Bit-Worte
w2
G(w1 )
G(G(w4 ) ⊕ w4 ⊕ 7)
w3
w2
G(w
)
⊕
w4 ⊕ 8 ⊕
1
G(w1 ) ⊕ 7
Tabelle 6.1: Skipjack-Regelübergang
42
w4
w3
w2
?
G
?
- j
1
?
?
j
?
Regel A
?
j
?
?
j
?
G
2
G
3
G
4
G
?
- j
5
?
?
j
?
Regel A
?
j
?
G
6
G
7
G
PP
P
P
?
j
?
?
j
G
?
j
8
1
10
?
G
Regel B
?
- j
11
?
G
?
- j
12
?
G
?
- j
13
?
G
?
j
14
?
G
?
- j
15
Regel B
?
G
?
- j
16
?
G
?
?
?
?
Abbildung 6.7: Alternative Darstellung von Skipjack (hier nur Runde 1–16, die nächsten
16 Runden sind bis auf die Zähler identisch).
43
Differentielle Analyse
Zwei differentielle 12-Runden-Charakteristiken, die man sich anhand des Signalverlaufs
aus Abbildung 6.7 klar machen kann, lauten:
• Differenz 0X00 vor Runde 5 ⇒ Differenz XXX0 nach Runde 16
• Differenz X000 nach Runde 28 ⇒ Differenz XX0X vor Runde 17
Es kann also, wenn man beide Charakteristiken kombiniert, nie vorkommen, dass gilt:
• Eingangsdifferenz 0X00 vor Runde 5 ⇒ Ausgangsdifferenz nach Runde 28 mit
X000.
Alle solchen Rundenschlüssel wären falsch. Insgesamt gilt also: Gegeben die Zwischenergebnisse (x1 , x2 , x3 , x4 ) und (x1 ⊕y, x2 , x3 , x4 ) vor Runde 29, so ist die Ausgangsdifferenz
nach Runde 29
(G(x1 ) ⊕ G(x1 ⊕ z), y, 0, 0).
|
{z
}
:=x (siehe Angriff, 3.)
Tupel mit anderer Ausgangsdifferenz als XX00 sind für uns also irrelevant. Somit haben
wir eine differentielle Analyse der Runden 5–29 von Skipjack durchgeführt.
Angriff (Chosen-Plaintext-Attack)
Mithilfe des Wissens über bestimmte Differenzen, die nicht auftauchen können, kann
man nun den möglichen Schlüsselraum stark einengen bzw. sogar auf den korrekten
Schlüssel kommen, wenn man eine in der Rundenzahl reduzierte Version von Skipjack
betrachtet. Mit den gegebenen Differenzen für 25 Runden werden wir nun einen Angriff
auf die Runden 5–29 vorstellen:
1. Lasse 222 Mengen mit je 216 Klartexten mit paarweiser Differenz 0X00 verschlüsseln. Zum Beispiel (a, b, c, d), (a, b + z, c, d) mit z ∈ 1, . . . , 216 . (216 Klartexte
ergeben per Kombination ungefähr 231 mögliche Paare.)
2. Behalte nur Tupel mit Ausgangsdifferenz XX00 (etwa jede zweite Menge liefert
ein Paar).
3. Teste für alle Rundenschlüssel und Chiffrat-Paare (a, b, c, d), (a ⊕ x, b ⊕ y, c, d), ob
G−1 (a) ⊕ G−1 (a ⊕ x) = y
und verwerfe entsprechende Schlüssel (was möglich ist, da der Schlüssel ja in G
eingeht).
4. Die restliche 48 Bit werden per brute force ermittelt.
Aufwand
Ein Rundenschlüssel erfüllt obige Gleichung (Schritt 3) jeweils mit der (erwarteten)
21
Wahrscheinlichkeit von ungefähr 2−16 . Daraus folgt, es bleiben etwa 232 (1 − 2−16 )2
44
21
falsche Kandidaten übrig (≈ 0, 000054). Der Ausdruck 232 (1 − 2−16 )2 lässt sich erklären, als die Wahrscheinlichkeit dafür, dass für alle 232 möglichen Rundenschlüsseln
die Gleichung nicht erfüllt ist (also die Gegenwahrscheinlichkeit 1 − 2−16 gilt) und zwar
für alle 221 Paare mit Differenz XX00.
Die Aufwände für jeden einzelnen Schritt lauten:
1. 222 · 216 = 238 (Anzahl Klartexte, die erstellt werden müssen)
2. 222 · 216 = 238 (Anzahl Klartexte, die überprüft werden müssen)
3. 221 · 232 = 253 (Man nimmt 221 = 222 /2, da nur jede zweite Menge ein Paar
liefert und 232 , da alle möglichen 32-Bit-Schlüssel durchgegangen werden. Durch
trickreiches Ausnutzen der Struktur von G ist dies aber auch in ≈ 221 ·217 möglich.)
4. 248 (per brute force, aber auch hier sind intelligentere Verfahren bekannt.)
Es gilt zu bemerken, dass der vollständige 32-Runden-Skipjack in der Praxis noch ungebrochen ist.
45
7 AES (Advanced Encryption Standard)
Im Jahr 1997 gab es eine internationale Ausschreibung für einen DES-Nachfolger durch
das National Institute of Standards and Technology (NIST). Die Anforderungen an den
Nachfolger lauteten:
• Eine Blocklänge von 128 Bit
• Eine variable Schlüssellänge von 128, 192 oder 256 Bit
• Leicht implementierbar und leistungsstark, sowohl in Hardware als auch in Software
• Robust gegen alle bekannten Methoden der Kryptoanalyse, einschließlich Seitenkanälen (also Angriffe gegen eine physische Implementierung)
• Patent- und lizenzfrei
Die 15 eingereichte Kandidaten wurden einem öffentlichen Auswahlprozess (den AESKonferenzen) unterzogen und es blieben fünf Finalisten, die in Tabelle 7.1 verglichen
werden. Von den Finalisten konnte sich am Ende Rijndael durchsetzen und wurde zum
neuen Standard AES.
7.1 Aufbau und Funktionsweise
Die Blocklänge von AES beträgt wie gefordert 128 Bit (Rijndael in der Originalfassung
unterstützt auch 192 und 256 Bit) und die Schlüssellänge kann 128, 192 oder 256 Bit
betragen. Die Schlüssellänge beeinflusst die Rundenzahl und die Bestimmung der Rundenschlüssel (Key Schedule bzw. Schlüsselexpansion genannt). Die Anzahl der Runden
steigt mit der Länge des Schlüssels und es werden dementsprechend 10, 12 oder 14 Runden verwendet. Die internen Zwischenwerte, der sogennante Zustand, welcher zu Beginn
der Klartext selbst ist, und die Rundenschlüssel werden als 4-zeilige Byte-Matrix und
je nach Schlüsselgröße mit 4, 6 oder 8 Spalten repräsentiert. Im Gegensatz zur FeistelStruktur des DES findet man hier eine Art Substitutions-Permutations-Netzwerk, wobei
die Substitution“ mithilfe von linearen Funktionen erfolgt.
”
Ablauf
Jede Runde läuft in vier Schritten ab (alle Aktionen sind dabei invertierbar!) und die genannten Operationen werden auf den Zustand angewendet. Am Anfang und zum Schluss
gibt es noch eine spezielle Vor- bzw. Schlussrunde.
46
g
erk
un
erh
eit
Bem
Sic
h
Str
ukt
ur
En
twi
ckle
r
Don
Coppersmith
Feistel
(32 Runden)
hoch-sicher
komplexe
Struktur
(erschwert
Sicherheitsanalyse)
Ronald Rivest
Feistel
(32 Runden)
hinreichend
sicher
sehr einfacher
Aufbau (wenige
PseudoCodezeilen)
Rijndael
Joan Daemon,
Vincent Rijmen
SubstitutionsPermutationsNetzwerk
(10, 12 oder 14)
hinreichend
sicher
einfache
Struktur;
bestes in HW
& SW (nur 500
Zeilen C-Code)
Serpent
Ross Anderson,
Eli Biham,
Lars Knudsen
SubstitutionsPermutationsNetzwerk
(32 Runden)
hoch-sicher
(vermutlich
sicherstes)
schnellste HW,
lahmste SW
Twofish
Bruce Schneier,
Niels Ferguson,
David Wagner
hoch-sicher
komplexe
Struktur
(erschwert
Sicherheitsanalyse)
MARS
RC6
Feistel
(16 Runden)
Tabelle 7.1: NIST-Ausschreibungsfinalisten zur DES-Nachfolge
• Vorrunde: Eine Key Addition wird ausgeführt, d. h. ein bitweises XOR der Zustandsmatrix mit dem 0-tem Rundenschlüssel
Diese vier Schritte werden für jede Runde ausgeführt:
1. Byte Substitution: Dies wird auch die Rijndael-S-Box“ genannt und dieser Teil
”
sorgt für Nicht-Linearität des Algorithmus. Hierbei wird jedes Byte des Zustandes
durch ein anderes ersetzt.
a) Fasse die Bytes als Elemente von F28 auf und invertiere sie (bezüglich der
Multiplikation), falls der Wert ungleich null ist.
b) Führe eine affine Transformation y = Ax+b mit den Konstanten A ∈ {0, 1}8×8
47
und b ∈ {0, 1}8 durch, welche wie folgt definiert sind:

1
1


1

1
A=
1


0

0
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
1

1
1


1

1
,
0

0


0
1
 
1
1
 
 
0
 
0

b=
0 .
 
 
1
 
1
0
2. Shift Row: Man führt in diesem Schritt eine zyklische Rotation der Zeilen gegeneinander aus. Diese wird beispielhaft für 128-Bit-Datenblöcke in Abbildung 7.1
visualisiert. (Für andere Blockgrößen von Rijndael werden die Zeilen teilweise anders verschoben.)
a
b
c
d
a
b
=⇒
c
d
Abbildung 7.1: Shift-Row-Operation für 128-Bit-Datenblöcke
b wird hier vorgenommen, dabei
3. Mix Column: Eine lineare Transformation y = Ax
werden die Spalten als Vektoren in F428 aufgefasst. Jedes der 4 Bytes einer Spalte
ist also als ein Vektorelement zu sehen. Beim Entschlüsseln verwendet man die
Matrix Ab−1 .
4. Key Addition: Dieser Schritt ist wie in der Vorrunde das bitweises XOR eines
Bit-Rundenschlüssels mit der Zustandsmatrix.
• Schlussrunde: Die letzte Runde läuft wie die Runden zuvor ab, allerdings wird der
Mix-Column-Schritt ausgelassen.
Schlüsselexpansion
Die Rundenschlüssel werden vom Hauptschlüssel per Schlüsselexpansion erstellt. Der
folgenden Algorithmus beschreibt diesen Vorgang für den AES mit einer Schlüssellänge
von 128 Bit für die i-te Runde:
1. Teile Schlüssel in 32-Bit-Worte W [0], . . . , W [3] auf, also genau die Spalten der
Byte-Matrix
2. Berechne W [i] rekursiv:
i f i = 0 mod 4
then W [i] := W [i − 4] ⊕ f (W [i − 1]) ⊕ const(i)
else
W [i] := W [i − 4] ⊕ W [i − 1]
48
Wobei f eine Funktion ist (die zirkuläre Linkshifts, Substitutionen und eine XORAddition beinhaltet), und const(i) eine von i abhängige Konstante bezeichnet. Für AES
mit einer Schlüssellänge von 192 bzw. 256 Bit ersetzt man die 4“ nun natürlich durch
”
eine 6“ bzw. 8“ und bei AES-256 verwendet man folgendes für den if-then-Abchnitt:
”
”
W [8j + 4] = W [i] := W [i − 8] ⊕ ByteSub(W [i − 1]).
7.2 Schwächen und beste bekannte Angriffe
Einige bekannten Schwächen und die besten bekannten Angriffe gegen AES wollen wir
nun kurz besprechen.
Mathematische Struktur Die Verschlüsselung ist als eine geschlossene algebraische Formel über F28 darstellbar, der Algorithmus hat also eine zu starke mathematische
Struktur und ist damit theoretisch durch Lösen nicht-linearer Gleichungssysteme
angreifbar.
Seitenkanalangriffe Für eine Cache-Timing-Attack, bei welcher man mithilfe der Zeitdauer für bestimmte Berechnungen Rückschlüsse über die Beschaffenheit des Schlüssels ziehen kann, benötigt man über 200 Millionen gewählte Klartexte und eben
exakte Timing-Information. Oder es ist einem Angreifer möglich, beliebigen Code
auf den Verschlüsselungsservern ausführen.
Related-Key-Attack Eine Related-Key-Attack ist gegen AES-192 und AES-256 mit einem Aufwand von ungefähr 2100 möglich. Für rundenreduzierte AES-Varianten
mit 256 Bit Schlüssellänge sind folgende Aufwände bekannt: Gegen 9, 10 bzw. 11
Runden lauten die Aufwände 239 , 245 bzw. 270 .
Meet-in-the-Middle-/Biclique-Attack In [BKR11] wurde der erste Key-Recovery-Angriff
auf den vollen AES vorgestellt. Die effektive Schlüssellänge wurde per Meet-in-theMiddle- und Biclique-Attack um 2 Bit verkürzt. Es wird hierfür nur ein einziges
Klartext-Chiffrat-Paar benötigt.
49
8 Betriebsmodi für Blockchiffren
Die in diesem Kapitel vorgestellten Betriebsmodi erlauben die wiederholte und sichere Nutzung von Blockchiffren mit einem einzigen Schlüssel. Eine Blockchiffre erlaubt
nämlich nur die Verschlüsselung eines einzelnen Blocks mit der passender Länge. Durch
Randomisation, z. B. durch die zusätzliche Eingabe eines sogenannten Initialisierungsvektors, wird es ermöglicht, mehrere Blöcke zu verschlüsseln. Längere Nachrichten müssen
darüberhinaus aufgeteilt und (bei zu kleinen Endstücken) gepaddet werden.
8.1 ECB: Electronic Codebook Mode
Der Klartext m wird in Blöcke ‡ n bit aufgeteilt und jeder Block separat mit demselben
Schlüssel verschlüsselt, wie es in Abbildung 8.1 zu sehen ist. Dies ist der einfachste Modus
und zugleich der unsicherste.
k
k
Übertragung
m
Ek
c0
c
Ek−1
m0
Abbildung 8.1: ECB
Vorteile:
+ Keine Fehlerfortpflanzung, d. h. Übertragungsfehler (Bitflips) sind
auf die betroffenen Blöcke begrenzt
+ Verschlüsselte Datenspeicher können hier blockweise ausgelesen
bzw. beschrieben werden; einfache Suchfunktionen sind auf verschlüsselten Daten ausführbar
+ Ver- und Entschlüsselung parallelisierbar
Nachteile: − Gleiche Klartext-Blöcke führen zu gleichen Chiffrat-Blöcken (darum wird es auch Codebook“ genannt)
”
− Ein Angreifer kann Blöcke löschen, verändern, duplizieren
(Replay-Attack) und die Reihenfolge ändern (somit ungeeignet für
lange Nachrichten)
Um diesen Nachteilen abzuhelfen, sollte der Chiffreblock vom Klartextblock und von
vorherigen Klartext- bzw. Chiffreblöcken abhängen, damit sich wiederholende, identische Klartextblöcke unterschiedliche Chiffreblöcke liefern. Man kann damit dann auch
50
Einfüge-, Lösch- und Änderungs-Versuche erkennen. Ohne eine solche Abhängigkeit von
vorherigen Blöcken bleiben gleiche Blöcke gut erkennbar, was die Abbildung 8.21 verdeutlicht. Man kann darin links ein Bild von Tux, dem Linux-Maskottchen sehen, welches
trotz ECB-Verschlüsselung rechts immer noch grob als solches zu erkennen ist.
(a) TuX, der Pinguin
(b) ECB-verschlüsselter TuX
Abbildung 8.2: ECB-Verschlüsselung an einem Bild-Beispiel
8.2 CBC: Cipher Block Chaining Mode
Bei CBC wird ein n-Bit-Register verwendet, welches den vorherigen Chiffreblock zwischenspeichert. Dieses benötigt eine Anfangsbelegung, einen sogenannten Initialisierungsvektor (IV). Die Chiffreblöcke ci erhält man nun durch
c0 := Initialisierungsvektor,
ci := Ek (mi ⊕ ci−1 ).
Es hängt also jeder Chiffreblock ci von allen vorausgegangenen Blöcken und dem IV ab.
Für die Entschlüsselung gilt
c0 := Initialisierungsvektor,
mi := Ek−1 (ci ) ⊕ ci−1 .
Dieser Ver- und Entschlüsselungsvorgang ist in Abbildung 8.3 veranschaulicht.
CBC ermöglicht Selbstsynchronisation: Da man zur Entschlüsselung nur den momentanen und den vorherigen Block braucht, müssen Sender und Empfänger nicht den IV
austauschen. Der Empfänger kann irgendwas nehmen und der Sender schickt als ersten
Block Zufall. Für den nächsten Block steht nun das passende im Empfänger-Register.
1
8.2 (a) von Larry Ewingi ([email protected]) erstellt mit GIMP; 8.2 (b) von Wikimedia Commens
51
k
k
Übertragung
m
Ek
c0
c
Register
Ek−1
m0
Register
Abbildung 8.3: CBC
Vorteile:
+ Nachteile von ECB beseitigt
+ Entschlüsselung selbstsynchronisierend (da für die Berechnung eines Klartextes nur die beiden letzten Chiffrate benötigt werden)
Nachteile: − Initialisierungsvektor muss übertragen werden oder alternativ
Selbstsynchronisation nutzen ⇒ kleiner Bandbreitenverlust
− nur lesender wählerfreier Zugriff (auf z. B. Datenspeicher) über
Selbstsynchronisation, kein Schreibzugriff
− Übertragungsfehler erzeugen Bitfehler bei der Entschlüsselung des
nachfolgenden Blocks
− Verschlüsselung nicht parallelisierbar (Entschlüsselung schon)
Behandlung des letzten Blocks
Hat der letzte Block nur eine Länge von l < n und Padding ist nicht möglich (z. B. aufgrund Bandbreiten- oder Anwendungsbeschränkungen), kann man (als Sender) wie folgt
vorgehen: Verschlüssle den vorletzten Chiffreblock cr−1 , addiere diesen verschlüsselten
Wert mit dem letztem Block mr und nehme von dem Ergebnis die linken l Bits. Allerdings ist der letzte Block anfällig gegen (sinnvolle) Veränderungen, was mit Malleability
bezeichnet wird, da sich eine Veränderung im Chiffretext nicht mehr auf folgende Blöcke
auswirken kann.
Eine bessere Methode ist Ciphertext Stealing, welche in Abbildung 8.4 zu sehen ist. Hierbei wird der letzte Klartextblock mit den höherwertigen Bits des vorletzten Chiffreblocks
gepaddet und verschlüsselt. Die höherwertigen Bits des vorletzten Chiffreblocks werden
entfernt und der letzte und vorletzte Chiffreblock werden vertauscht. (Man nimmt also nur eine Reihenfolgenänderung vor, aber es werden keine zusätzlichen Padding-Bits
benötigt.)
8.3 CFB: Cipher Feedback Mode
Man verwendet bei CFB ein n-Bit-Schieberegister, dessen Inhalt um l Bit nach links
verschoben wird und welches dann mit den l Bit von c, dem letzten Chiffrat, befüllt
wird. Anschließend werden diese n Bit aus dem Schieberegister verschlüsselt, l Bit davon
52
mp−1
mp
Ek
c0p−1
mp
Ek
cp−1
cp
Abbildung 8.4: Ciphertext Stealing bei letztem Klartextblock mp
ausgewählt und auf den neuen Klartextblock addiert, der somit verschlüsselt wurde. Man
kann sich dies mithilfe der Abbildung 8.5 leicht verständlich machen.
Schiebereg.
Schiebereg.
n Bit
Ek
k
Ek
k
n Bit
l-Bit Ausw.
l-Bit Ausw.
Übertragung
l Bit
m
c0
c
m0
Abbildung 8.5: CFB
Ein Initialisierungsvektor wird benötigt (analog zu CBC), dieser kann im Klartext (z. B.
als Präambel zur eigentlichen Nachricht) übertragen werden; äquivalent ist Selbstsynchronisation nutzbar. Die Chiffretextfolge ist vom IV und allen zuvor übertragenen
Chiffraten abhängig. Die Invertierbarkeit der Blockchiffrefunktion, in vorherigen Abbildungen durch Ek−1 beim Empfänger gekennzeichnet, wird nicht benötigt, da die nBit-Schieberegister den gleichen Inhalt haben.
53
Vorteile:
+ Blocklänge l aus 1, . . . , n frei wählbar (ohne Overhead bei Kommunikation)
+ Selbstsynchronisierend (analog zu CBC); für l = 1 sogar robust
gegen Bitslips (für l > 1 nur falls Vielfaches von l verschluckt
wurde)
+ Chiffre muss nicht (effizient) invertierbar sein
Nachteile: − Mehraufwand für Ver-/Entschlüsselung von Faktor n/l, da schließlich n Bits verschlüsselt, aber nur l Bits verwendet werden. (Einzelne Runden können aber vorberechnet werden, da der Klartext
nur mit XOR eingeht.)
− Resynchronisation bei Bitflips erst nach n/l Blöcken
− Ein Angreifer kann gezielt Klartextblock-Bits ändern, erzeugt aber
in nachfolgenden Blöcken zufällige Änderungen. Der letzte Block
ist zwar wieder gefährdet, wird aber bei 8-Bit-CFB (l = 8) meist
für die Prüfsumme verwendet, ist also nicht sinnvoll änderbar.
Ist es einem Angreifer möglich ein Chiffretext zu einem anderen umzuformen, sodass
deren Klartexte in Relation zueinander stehen, spricht man von Malleability (siehe auch
Abschnitt 9).
Bei Übertragungsfehlern wird solange falsch dechiffriert, bis der Fehler aus dem Schieberegister hinausgeschoben wird. Bei l übertragenen Zeichen und einer Schieberegisterlänge
von n lautet die Anzahl falsch dechiffrierter Zeichen 1 + n/l.
8.4 OFB: Output Feedback Mode
Bei OFB wird ähnlich wie bei CFB vorgegangen, allerdings nimmt man nicht l Bit
des Chiffrats, die man dann dem Schieberegister zuführt, sondern die l-Bit-Auswahl der
Verschlüsselung des Schieberegisterinhalts, wie dies in Abbildung 8.6 zu sehen ist. Ein
Initialisierungsvektor wird benötigt, dieser kann im Klartext übertragen werden.
Vorteile:
+ Schlüsselstrom unabhängig von Nachrichtenstrom vorberechenbar
+ Keine Fehlerfortpflanzung bei Bitflips
+ Chiffre muss nicht (effizient) invertierbar sein
Nachteile: − Lineare Verschlüsselung (XOR) verwendet, d. h. ein Angreifer
kann gezielt Klartext-Bits kippen. (Es gibt keine NachrichtenVerkettung wie beim CBC, CFB, also ist die Erkennung einer
Manipulation genauso problematisch wie bei ECB.)
− Wiederverwendung“ des Initialvektors ist besonders kritisch, es
”
gilt dann c ⊕ c0 = m ⊕ m0 , man kann nun den Klartext erkennen
wie bei Vigènere.
− Keinerlei Resynchronisation, wenn etwas verloren geht (ECB, CBC
und CFB resynchronisieren, wenn ganze Blöcke verloren gehen).
54
Schiebereg.
Schiebereg.
n Bit
Ek
Ek
l-Bit Ausw.
l-Bit Ausw.
k
k
n Bit
Übertragung
l Bit
c0
c
m
m0
Abbildung 8.6: OFB
8.5 CTR: Counter Mode
Ein Initialisierungsvektor wird benötigt, welcher im Klartext übertragen werden kann.
Dieser IV, mit addiertem bzw. angehängtem Counter, wird verschlüsselt und auf den
Klartext addiert. Anschließend wird der Counter erhöht und wieder mit dem IV verschlüsselt und auf den nächsten Klartextblock addiert usw., wie es Abbildung 8.7 zeigt.
IV
IV
Counter
Counter
k
Ek
Ek
k
Übertragung
m
c0
c
m
Abbildung 8.7: CTR
Vorteile:
+
+
+
+
+
Schlüsselstrom unabhängig von Nachrichtenstrom vorberechenbar
Ver- & Entschlüsselung parallelisierbar
Keine Fehlerfortpflanzung bei Bitflips
Chiffre muss nicht (effizient) invertierbar sein
Verschlüsselte Datenspeicher können blockweise bearbeitet werden
Im Wesentlichen hat man also die Vorteile von ECB und OFB. Außerdem hat man auch
die gleichen Nachteile wie bei OFB.
55
8.6 Probleme bei schwachen Verfahren
Bei dem OFB-Verfahren ist die Schlüsselwahl zu beachten. Denn mit einem schwachem Schlüssel k kann die Blockchiffre Ek eine Involution bilden (d. h. eine selbstinverse Permutation) und erzeugt dann einen Schlüsselstrom mit einer Periode von 2n.
Dies ermöglicht einen einfachen Known-Plaintext-Angriff, wenn 2n Bit vom Klartext
bekannt sind bzw. es entspricht sogar einer Vigenère-Verschlüsselung.
Bei dem CBC-Modus ist eine Birthday-Attack aufgrund gleicher Chiffrat-Blöcke möglich.
Bei gleichen Chiffrate-Blöcken ci = cj gilt nämlich:
Ek (mi ⊕ ci−1 ) = Ek (mj ⊕ cj−1 ).
Und daraus folgt:
mi ⊕ mj = ci−1 ⊕ cj−1 .
Somit erhält man aufeinander addierte Klartextblöcke mi ⊕ mj . Dies tritt bei einer
Blocklänge von n ab einer Klartextlänge von ungefähr 2n/2 mit signifikanter Wahrscheinlichkeit auf. Darum sollte man Schlüssel bei großen Datenmengen häufig wechseln.
8.7 Vergleich
Ein Vergleich über einige Betriebsmodi findet sich in Tabelle 8.1.
56
–
CBC
m>n
IV bzw.
autom.
nach einem
Block
CFB
Zeichenstrom
(jedes
Zeichen
einzeln
bearbeitet)
IV bzw.
autom.
nach einem
Block
OFB
m > n,
Fehlererweiterung
unerwünscht
CTR
m > n,
Fehlererweiterung
unerwünscht
IV
IV
Acc
ess
om
Ra
nd
Bit
-Sli
p
r
hle
Bit
-Fe
eite
run
g
Feh
le
rer
w
io n
Syn
chr
oni
sat
g
ndu
n
Ver
we
Nachricht m
¡ Block n
ECB
Nein
1 Block
zerstört
Keine Synchronisation
mehr
rw
Ja
1 Block
zerstört, 1 Bit
im nächsten
Block invertiert
Keine Synchronisation
mehr
r
Ja
Nächsten
1 + n/l Zeichen
gestört
Nur für l = 1
nach n Bit
Resynchronisation
r
Nein
1 Bit invertiert
Keine Synchronisation
mehr
–
Nein
1 Block
zerstört
Keine Synchronisation
mehr
rw
Tabelle 8.1: Betriebsmodi im Vergleich
57
9 Formale Sicherheitsbegriffe
Bei den verwendeten formalen Sicherheitsbegriffen wird ein Paar aus zwei Spielen definiert, mit einem Angreifer A und einem Herausforderer Eb , deren Ergebnis jeweils eine
binäre Zufallsvariable ist. Die Chiffre ist sicher im Sinne der Definition, wenn kein Angreifer bewirken kann, dass die beiden Spielergebnisse statistisch signifikant voneinander
abweichen. Die Mächtigkeit des Angreifers wird dabei durch zwei Orakel O und O0 modelliert, auf welche der Angreifer vor bzw. während des Spiels zugreifen kann. So kann
ein Angreifer ein Verschlüsselungsorakel nutzen, um Klartexte zu verschlüsseln, ohne
dass der Angreifer dabei Zugriff auf den geheimen Schlüssel hat.
Angriffe
• Chosen-Plaintext Attacks (CPA): Bei diesem Angriff sind O und O0 reine Verschlüsselungsorakel.
• Chosen-Ciphertext Attacks (CCA1): Hier ist O ein Ver- & Entschlüsselungsorakel
und O0 ist nur ein Verschlüsselungsorakel.
• Adaptive Chosen-Ciphertext Attacks (CCA2): Hier sind O und O0 jeweils Ver- und
Entschlüsselungsorakel. (O0 weigert sich hierbei allerdings trivialerweise, ChallengeChiffrate zu entschlüsseln.)
Schutzziele
Die folgenden Veranschaulichungen sind abgeleitet aus [BDPR98].
• Indistinguishability (IND): Ein Angreifer A kann keine zwei Klartexte m0 , m1 finden, deren Chiffrate er dem jeweils zugehörigen Klartext zuordnen könnte. In dem
Spiel, welches in Abbildung 9.1 zu sehen ist, gibt der Angreifer A die zwei Klartexte an den Herausforderer Eb , welcher mit einem zufällig ausgewähltem b ∈ {0, 1}
entscheidet, welcher der beiden Texte verschlüsselt und zurückgegeben wird. Der
Angreifer gibt bb ∈ {0, 1} aus, mit welchem er angibt, ob seiner Meinung nach m0
oder m1 verschlüsselt wurde. Sind bb und b identisch, so war der Angriff erfolgreich.
• Real or Random (ROR): Ein Angreifer A kann keinen Klartext m finden, dessen
Chiffrat er von verschlüsseltem Zufall unterscheiden könnte. In Abbildung 9.2 wird
R
dies veranschaulicht, hierbei wird mit x ←
− Klartextraum ausgedrückt, dass man
aus dem Klartextraum per Zufall ein Element auswählt.
• Non-Malleability (NM): Ein Angreifer A kann Chiffrate nicht so umformen, dass
die Fälschung“ eine sinnvolle Relation R zum Original“ erfüllt. (Malleability
”
”
58
lässt sich übersetzen zu Formbarkeit“, Geschmeidigkeit“.) Der Spielablauf ist
”
”
in Abbildung 9.3 zu sehen. Es geht bei diesem Angriff nicht darum, etwas über
den Klartext x zu erfahren, sondern einen Chiffrat-Vektor ~y auszugeben, dessen
Entschlüsselung ~x eine (bedeutende) Relation R zum Klartext x hat, geschrieben
als R(x, ~x). Zuerst gibt der Angreifer hierbei eine Klartextverteilung M aus. Daraus werden zwei Nachrichten x0 , x1 zufällig ausgewählt und x0 wird für ihn zu y
verschlüsselt und zurückgegeben. Der Angreifer gibt nun die Beschreibung einer
Relation R und einen Vektor ~y aus. Wobei y ∈
/ ~y gegeben und R effizient prüfbar
ist. Der Vektor ~y wird nun entschlüsselt zu ~x. Der Angreifer ist erfolgreich, sofern
die Relation R(x, ~x) erfüllt ist und die Wahrscheinlichkeit dafür signifikant größer
ist als diejenige, für die R(x1 , ~x) mit einem zufällig gewähltem x1 aus M gilt.
Warum so eine auf den ersten Blick seltsame Definition sinnvoll ist, kann man sich
verständlich machen, wenn man als Beispiel eine Auktion mit zwei Teilnehmern
betrachtet: Der ehrliche Teilnehmer gibt ein Gebot g verschlüsselte als Ek (g) ab
und der unehrliche zweite Teilnehmer liest dies. Könnte er nun, ohne es zu entschlüsseln, daraus Ek (g + 1) machen, würde er zwar nicht wissen, was er bietet,
aber immer gewinnen.
m0 ,
A
Eb
m1
y = EncK (mb )
y
h
b
b
i
Ergebnis: bb
Abbildung 9.1: Indistinguishability (IND)
A
m
Eb
R
x←
− Klartextraum
(
y
h
b
b
y=
EncK (m)
EncK (x)
falls b = 0
falls b = 1
i
Ergebnis: bb
Abbildung 9.2: Real or Random (ROR)
59
A
(Klarte
Eb
M
xtverte
il
ung)
y
R
x0 , x1 ←
−M
y = Enck (x0 )
R, ~y
~x = Deck (~y )
[Ergebnis: y ∈
/ ~y ∧ ⊥ ∈
/ ~x ∧ R(xb , ~x)]
Abbildung 9.3: Non-Malleability (NM)
9.1 Beziehungen zwischen den Begriffen
Die Beziehungen zwischen den verschiedenen Sicherheitsbegriffen nach [BDPR98] sind in
Abbildung 9.4 zu finden. Hierbei bedeuten die gestrichelten und durchgestrichene Pfeile
natürlich, dass die jeweiligen Begriffe nicht auseinander folgen, während die normalen
Pfeile die folgt aus“-Beziehung darstellen sollen.
”
NM-cpa
NM-cca1
NM-cca2
IND-cpa
IND-cca1
IND-cca2
RoR-cpa
RoR-cca1
RoR-cca2
Abbildung 9.4: Beziehung zwischen den Sicherheitsbegriffen
Im Folgenden sollen einige Beziehungen erläutert werden und es stehe atk“ kurz für
”
CPA“, CCA1“ und CCA2“.
”
”
”
• IND-atk ⇒ RoR-atk: Kann man zwei selbstgewählte Klartexte nicht unterscheiden,
dann auch nicht ein gewählter und ein zufälliger Text.
• RoR-atk ⇒ IND-atk: RoR-Sicherheit bedeutet, dass kein Angreifer einen Klartext
m oder m0 findet, sodass er Ek (m) oder Ek (m0 ) von verschlüsseltem Zufall unterscheiden kann. Aus der Transitivität der Ununterscheidbarkeits-Relation folgt die
Ununterscheidbarkeit von Ek (m) und Ek (m0 ).
60
• IND-CCA1 ; NM-CPA: Ein IND-CCA1-sicheres Schema bleibt IND-CCA1-sicher,
wenn man an jedes Chiffrat c ein Chiffrat c0 des bitweise invertierten Klartexts
anhängt. Ein NM-Angreifer kann dann den Inhalt von Chiffraten bitweise invertieren, indem er die Reihenfolge von c und c0 vertauscht.
• NM-CPA ; IND-CCA1 : Ein NM-CPA-sicheres Schema kann oBdA so umgebaut werden, dass gilt Ek (Ek (k)) = 0 . . . 0. Das Schema bleibt CPA-, nicht jedoch
CCA1-sicher (O von CCA1 gibt k frei, da es entschlüsseln kann).
Achtung: Ein Schema, für welches Ek (k) = 0 . . . 0 gilt, ist nicht NM-CPA-sicher.
Ein Angreifer kann die Relation R so wählen, dass R(x, a, b) erfüllt ist, genau dann,
wenn Da (b) = x gilt. Dann kann er bei gegebener Challenge y = Ek (x) dazu das
Chiffrat-Tupel ~y = (0 . . . 0, z) mit z = Ek (y) wählen und die Relation ist erfüllt.
Das Ergebnis: R(Dk (y), Dk (0 . . . 0), Dk (z)) = R(x, k, y) ist erfüllt, da Dk (y) = x
gilt.
• IND-CCA2 ⇒ NM-CCA2 : Ein Angreifer, der das NM-CCA2-Spiel gewinnt, kann
Chiffrate so umformen, dass er die Relation zwischen den entsprechenden Klartexten kennt. Damit kann er die Challenge im IND-CCA2-Spiel entsprechend umformen, entschlüsseln lassen und prüfen, ob der erhaltene Klartext in Relation zu m1
oder m2 steht.
• NM-atk ⇒ IND-atk: Ein Angreifer, der Klartexte wiedererkennen kann, kann zum
wiedererkannten Klartext mi einen Klartext m0 wählen (und verschlüsseln lassen),
sodass mi und m0 in einer vom Angreifer gewählten Relation stehen.
Beobachtungen
Diese formalen Sicherheitsbegriffe und deren Beziehungen untereinander lassen uns zu
folgenden negativen (−) und positiven (+) Beobachtungen kommen:
− Volldeterministische Verfahren (ECB) erfüllen keinen der Begriffe
− Selbstsynchronisierende (CBC, CFB) und lineare (OFB, CTR) Verfahren erfüllen
keinen NM-Begriff
+ Ideal Cipher im CBC-Mode ist IND-CPA-sicher (sogar IND-CCA1). Analog dazu
auch jede Chiffre, die kein Angreifer ohne Schlüsselzugriff von einer Ideal Cipher
unterscheiden kann.
+ Um NM-CPA-Sicherheit zu erreichen (sogar IND-CCA2), wird ein IND-CPAsicheres Verfahren mit einem Authentifikationsverfahren (MAC, siehe Abschnitt
11.1) kombiniert. Dies führt zur sogenannten Authenticated Encryption (z. B. den
Modi CCM, CWC, OCB, EAX oder GCM).
61
10 Hashfunktionen
10.1 Definition und Eigenschaften
Definition 10.1.1: (Hashfunktion): Eine Hashfunktion H ist eine Abbildung, die einen
beliebig großen Eingabewert auf eine kleine Ausgabe, den sogenannten Hashwert, abbildet. Formaler lässt sich dies ausdrücken per:
H : {0, 1}∗ → {0, 1}n
bzw. Hk : {0, 1}∗ → {0, 1}|k| (keyed hash-function).
Aus kryptographischer Sicht sollte eine Hashfunktion H folgende Eigenschaften erfüllen:
• Urbildresistenz: Gegeben ein Hashwert h, ist es nicht praktikabel, ein Urbild m zu
finden, d. h. H(m) = h.
formal: Für jeden effizienten Angreifer A (mit Laufzeit polynomiell in der Eingabelänge) soll die folgende Wahrscheinlichkeit vernachlässigbar in einem Sicherheitsparameter λ sein:
Pr A(Hk (m), k) → m0 mit Hk (m0 y) = Hk (m)
Dabei ist (k, m) gleichverteilt zufällig aus {0, 1}λ × {0, 1}p(λ) mit einem beliebigen
aber festen Polynom p ∈ Z[X].
• Kollisionsresistenz: Es ist nicht praktikabel, zwei verschiedene Urbilder m, m0 mit
demselben Hashwert h = H(m) = H(m0 ) zu finden.
formal: Für jeden effizienten Angreifer A (mit Laufzeit polynomiell in der Eingabelänge) soll die folgende Wahrscheinlichkeit vernachlässigbar in einem Sicherheitsparameter λ sein:
Pr A(k) → (m, m0 ) mit Hk (m) = Hk (m0 )
Dabei ist k gleichverteilt zufällig aus {0, 1}λ .
Random Oracle
Ein Random Oracle (RO) ist eine (Über-)Idealisierung einer Hashfunktion und jedem
Urbild m ∈ {0, 1}∗ ist ein vollkommen zufälliger Hashwert h ∈ {0, 1}n zugeordnet (n
ist ein Sicherheitsparameter) und per Orakelzugriff kann jede Maschine im Modell die
entsprechende Funktion H auswerten.
Folgendes gilt es noch anzumerken:
62
• Es gibt (konstruierte) Protokolle, die im Random-Oracle-Modell sicher sind, aber
für keine bekannte Hashfunktion sicher sind.
• Das Random-Oracle- und Ideal-Cipher-Modell sind äquivalent. Mittels eines FeistelNetzwerks lässt sich aus einem RO eine IC konstruieren. Umgekehrt kann mittels
eines Merkle-Damgard-Schemas ein RO aus einer IC konstruiert werden. Beides
wird im folgenden Abschnitt behandelt.
10.2 Merkle-Damgard- & Feistel-Konstruktion
Es soll nun erläutert werden, wie man aus einer Ideal Cipher ein Random Oracle konstruiert und umgekehrt.
Ideal Cipher ⇒ Random Oracle“
”
Die Abbildung 10.1 zeigt wie man durch Verkettung einer Ideal Cipher mithilfe eines Initialisierungsvektors ein Random Oracle per sogenannter Merkle-Damgard-Konstruktion
erhält. Hierbei wird die eigentliche Nachricht m in kleinere Blöcke m1 , . . . , mn unterteilt
und den einzelnen Ideal Ciphern übergeben.
IV
m1
m2
IC
IC
mn
...
IC
H(m1 ||m2 || . . . ||mn )
Abbildung 10.1: Ideal Cipher ⇒ Random Oracle
Es gilt allerdings zu beachten, dass eine einfache Merkle-Damgard-Konstruktion noch
nicht genügt! Das Problem: Gegeben den Hashwert h einer unbekannten Nachricht m,
kann ein Angreifer zu jeder Nachricht m0 den Hashwert H(m||m0 ) berechnen, indem
einfach an die obige Pipeline-Konstruktion weitere Stufen angebaut werden und m0 aufgeteilt und eingegeben wird. Hierbei benutzt man H(m) als internen Hashwert zur Berechnung von H(m||m0 ). Dafür gibt es aber auch Lösungen:
• Wide-Pipe-Konstruktion nach [Luc04]: Es wird bei dieser Konstruktion intern mit
mehr Bits gearbeitet, als ausgegeben werden. Dies verhindert das Auffinden von
Kollisionen bei internen Hashwerten (also den Zwischenhashwerten). Siehe Abbildung 10.2 (a).
• Fast-Wide-Pipe-Konstruktion nach [NP10]: Die Hälfte der erweiterten interne Bits
werden auf den Ausgang des nachfolgenden ICs addiert, anstatt sie wie bei der
Wide-Pipe-Konstruktion an dessen Eingang zu legen. Siehe Abbildung 10.2 (b).
Random Oracle ⇒ Ideal Cipher“
”
Zur Konstruktion einer Ideal Cipher aus einem Random Oracle benötigt man laut
[HKT11] eine Feistel-Struktur mit 14 Runden, wie sie in Abbildung 10.3 angedeutet
63
IV1
m1
m2
...
mn
IC
IC
...
IC
H(m1 || . . . ||mn )
IV2
(a) Wide-Pipe-Konstruktion
IV1
m1
m2
...
mn
IC
IC
...
IC
H(m1 || . . . ||mn )
IV2
(b) Fast-Wide-Pipe-Konstruktion
Abbildung 10.2: Konstruktion eines Random Oracles aus einem Ideal Cipher
ist. Hierbei bezeichnet Ri den rechten Teil des internen Zustands nach der i-ten Runde
und k ist der Schlüssel, der der Hashfunktion Hi zur Verfügung gestellt wird. Unbekannt
ist allerdings, ob auch schon weniger Runden ausreichend sind.
k
H(i||k||Ri )
Hi
Ri
Abbildung 10.3: Random Oracle ⇒ Ideal Cipher
10.3 Äquivalenz von Krypto-Primitiven
Es wird in [CPS08] bemerkt, dass man, um Beweise für die Sicherheit eines KryptoSystems zu konstruieren meist zwei mögliche Ansätze verfolgt. Entweder verwendet man
bestimmte rechnerische Probleme, wie z. B. die Faktorisierung großer Zahlen, die als
schwer lösbar gelten (welche man, könnte man das Krypto-System brechen, dann ebenfalls lösen kann, was ja gerade als schwer machbar gilt), oder man nutzt der Effizienz
zuliebe ein idealisiertes Modell der Wirklichkeit, wie die bereits zuvor erwähnten IdealCipher- und Random-Oracle-Modelle. Die Äquivalenz solcher Modelle oder kryptogra-
64
phischer Konstruktionen, die wir hier Primitive nennen wollen, ist bedauerlicherweise
nicht unbedingt leicht zu zeigen, sodass manche Beweise schwer vergleichbar sind. Am
Beispiel der zuvor schon beschriebenen Gleichheit von Ideal Cipher und Random Oracle
wollen wir die Schwierigkeit von Äquivalenzbeweisen bezüglich bestimmter Definition
aufzeigen.
Eine erste Definition
Eine naive“ Definition für die Gleichheit von Primitiven, welche, wie wir bald sehen
”
werden, unzureichend ist, lautet:
Definition 10.3.1: (Indistinguishability): Eine Primitive Y kann aus X realisiert werden, wenn es eine Turingmaschine M gibt, sodass die Ein-Ausgabe-Verteilung von MX
ununterscheidbar ist von der Ein-Ausgabe-Verteilung von Y. Etwas formaler formuliert
kann man sagen, dass für jeden Unterscheider D gilt:
X
Pr[DM = 1] ≈ Pr[DY = 1].
Indistinguishability reicht nicht, da – sofern der Angreifer z. B. auf innere Rundenfunktionen zugreifen kann – dieser ein anderes Interface hat (eben die Ein- und Ausgänge
der inneren Funktionen). Solche Zugriffe auf die Innereien“ erlaubt das Random-Oracle”
Modell nicht.
Angriff gegen 5-Runden-Feistel
Nach dieser Definition genügt ein 4-Runden-Feistel-Netzwerk, um aus einem Random
Oracle eine Ideal Cipher zu implementieren. Es existiert aber ein Angriff auf die 5Runden-Feistel, welcher in [CPS08] beschrieben ist. Die Idee dieses Angriffes ist, dass eine
Eigenschaft der 5-Runden-Struktur aufgezeigt wird, die bei einer zufälligen Permutation
nicht wirklich zu finden wäre. Die im Folgenden verwendeten Bezeichnungen sind in
Abbildung 10.4 übersichtlich dargestellt. Es seien Y und Y 0 beliebige Werte, die die
Eingabe zu F3 bilden. Sei Z ein weiterer beliebiger Wert, welcher die Eingabe für F4
darstellen soll. Wir setzen Z 0 = F3 (Y ) ⊕ F3 (Y 0 ) ⊕ Z und damit gilt
X = F3 (Y ) ⊕ Z = F3 (Y 0 ) ⊕ Z 0
0
0
0
X = F3 (Y ) ⊕ Z = F3 (Y ) ⊕ Z .
(10.1)
(10.2)
Mit X, X 0 , Y und Y 0 werden nun vier Paare (Xi , Yi ) wie folgt gebildet:
(X0 , Y0 ) = (X, Y 0 ),
(X1 , Y1 ) = (X 0 , Y ),
(X2 , Y2 ) = (X 0 , Y 0 ),
(X4 , Y4 ) = (X, Y 0 ).
Die dazugehörigen zwei Hälften der vier Klartexte seien mit Li und Ri bezeichnet. Wir
erhalten nun
R0 = Y0 ⊕ F2 (X0 ) = Y ⊕ F2 (X)
R1 = Y1 ⊕ F2 (X1 ) = Y ⊕ F2 (X 0 )
R2 = Y2 ⊕ F2 (X2 ) = Y 0 ⊕ F2 (X 0 )
R3 = Y3 ⊕ F2 (X3 ) = Y 0 ⊕ F2 (X).
65
L
R
F1
X
F2
Y
F3
Z
F4
S
F5
T
S
Abbildung 10.4: 5-Runden-Feistelkonstruktion
Mit den dazugehörigen Eingabewerten Z0 , . . . , Z3 für F4 , erhält man mit den Gleichungen
(10.1) und (10.2) diese Zusammenhänge:
Z0 = X0 ⊕ F3 (Y0 ) = X ⊕ F3 (Y ) = Z
Z1 = X1 ⊕ F3 (Y1 ) = X 0 ⊕ F3 (Y ) = Z 0
Z2 = X2 ⊕ F3 (Y2 ) = X 0 ⊕ F3 (Y 0 ) = Z
Z3 = X3 ⊕ F3 (Y3 ) = X ⊕ F3 (Y 0 ) = Z 0 .
Mit Si und Ti seien die Chiffrehälften bezeichnet. Die linken Chiffrehälften können wir
nun ausdrücken als
S0 = Y0 ⊕ F4 (Z0 ) = Y ⊕ F4 (Z)
S1 = Y1 ⊕ F4 (Z1 ) = Y ⊕ F4 (Z 0 )
S2 = Y2 ⊕ F4 (Z2 ) = Y 0 ⊕ F4 (Z)
S3 = Y3 ⊕ F4 (Z3 ) = Y 0 ⊕ F4 (Z 0 ).
Nach dieser etwas mühsamen Beschreibung erhalten wir folgende Beziehungen:
R0 ⊕ R1 ⊕ R2 ⊕ R3 = 0 = S0 ⊕ S1 ⊕ S2 ⊕ S3 .
Damit haben wir vier Klartext-Chiffrat-Paare gefunden, sodass die Addition der rechten
Klartexthälften, ebenso wie die Addition der linken Chiffrathälften null ergibt. Solch
66
eine Eigenschaft kann man bei einer wirklich zufälligen Permutation höchstens mit vernachlässigbarer Wahrscheinlichkeit finden (bei polynomial beschränkter Anfragezahl),
womit gezeigt wurde, dass die 5-Runden-Feistelkonstruktion nicht ausreichen kann.
Eine bessere Definition
Die richtige“ Definition hingegen ist nun:
”
Definition 10.3.2: (Indifferentiability): Eine Primitive Y kann aus X realisiert werden, wenn es eine Turingmaschine M und einen Simulator S gibt, sodass die EinAusgabe-Verteilung von (MX , X) ununterscheidbar ist von der Ein-Ausgabe-Verteilung
von (Y, S Y ). Für jeden Unterscheider D gilt also:
Pr[DM
X ,X
Y
= 1] ≈ Pr[DY,S = 1].
Der Simulator kann nun den Zugriff auf das Innere“ simulieren. Der Unterscheider soll
”
nun nicht erkennen, ob eine Permutation vorliegt und die Rundenfunktionen passend
dazu simuliert werden (IC zu RO) oder ob (zufällig gewählte) Rundenfunktionen zusammengesetzt wurden (RO zu IC).
10.4 Aufbau von SHA-1
Der SHA, was für Secure Hash Algorithm“ steht, wurde von dem National Institute of
”
Standards and Technology (NIST) zusammen mit der National Security Agency (NSA)
entwickelt und 1994 veröffentlicht. Von diesem Algorithmus gibt es mehrere Versionen
und wir werden uns mit SHA-1 beschäftigen, welcher sich folgendermaßen charakterisieren lässt und in Abbildung 10.5 zu sehen ist:
• Der Hash-Wert beträgt bei dieser Variante 160 Bit (intern wird aber mit 512 Bit
gerechnet) und die Initial- bzw. Zwischenzustände werden in fünf 32-Bit-Worten
A, . . . , E gespeichert.
• Es gibt 80 Runden, jeweils 20 mit einer von vier verschiedenen Funktionen fj , welche Verknüpfungen von logischen Operatoren sind und einer von vier Konstanten
cj . Für die ersten 20 Runden verwendet man f1 und c1 , für die nächsten 20 Runden
f2 und c2 , etc. Die verwendeten Funktionen lauten für die i-te Runde:


(B ∧ C) ∨ (¬B ∧ D)




B ⊕ C ⊕ D
(für
(für
fj (B, C, D) =

(B ∧ C) ∨ (B ∧ D) ∨ (C ∧ D) (für




B ⊕ C ⊕ D
(für
0 ≤ i ≤ 19)
20 ≤ i ≤ 39)
40 ≤ i ≤ 59)
60 ≤ i ≤ 79)
• Ein Nachrichtenblock von 512 Bit wird zu 80 32-Bit-Worten expandiert. Die ersten
16 Worte w0 , . . . , w15 sind die ursprüngliche Nachricht, jedes weitere wj wird als
67
160
512
32
B
A
C
D
E
D
E
D
E
D
E
20 Runden mit f 1
C
B
A
20 Runden mit f 2
C
B
A
20 Runden mit f 3
C
B
A
20 Runden mit f 4
+
+
+
+
+
160
Abbildung 10.5: SHA-1: Schematischer Aufbau, die Additionen werden dabei mod 232
durchgeführt
ein zyklischer Linksshift um eine Stelle (bezeichnet als ROL1 ) von jeweils vier
vorangegangenen, aufaddierten Nachrichten berechnet:
ROL1 (wj−16 ⊕ wj−14 ⊕ wj−8 ⊕ wj−3 )
(für 16 ≤ j ≤ 79).
• In Runde i fließt das Wort wi , die Konstante cj , die Funktion fj und die momentanen Zwischenvariablen Ai , . . . , Ei mit ein und bilden die neuen Zwischenvariablen
Ai+1 , . . . , Ei+1 wie folgt:
Ai+1 = ROL5 (Ai ) + fj (i, Bi , Ci , Di ) + Ei + cj + wi ,
Bi+1 = Ai ,
Ci+1 = ROL30 (Bi ),
Di+1 = Ci ,
Ei+1 = Di .
Dies ist in Abbildung 10.6 veranschaulicht.
Nach Ausführung aller Runden, erhält man nun den Hashwert, indem man die Variablen
A bis E aneinander hängt, also A||B||C||D||E. SHA-1 wird mittlerweile seinem Namen
allerdings nicht mehr ganz gerecht, da man einige starke Angriffe gefunden hat, siehe
z. B. [WYY05]. In der Praxis ist SHA-1 allerdings (noch) ungebrochen.
68
A
B
C
D
E
fj
+
+
ROL5
ROL30
A
B
C
D
+
wi
+
ci
E
Abbildung 10.6: SHA-1: Rundenfunktion, die Additionen werden mod 232 durchgeführt
10.5 Angriffsansätze gegen Hashfunktionen
Einige Angriffsansätze gegen Hashfunktionen werden im Folgenden kurz aufgelistet.
Meet-in-the-Middle Man kann eine Urbildsuche mithilfe der Meet-in-the-Middle-Methode
gegen eine Merkle-Damgard-Konstruktion ausführen. Dabei muss der Angreifer die
verwendete Kompressionsfunktion invertieren können.
1. Halbiere eine Nachricht in eine linke und eine rechte Hälfte. Verändere in der
linken Hälfte n/2 Stellen, wobei n die Hashwertlänge ist, sodass man 2n/2
verschiedene linke Nachrichtenhälften erhält.
2. Berechne für alle linken Nachrichtenhälften den Teil-Hashwert, tabelliere dieses Zwischenergebnisse (Vorwärtsschritt).
3. Sortiere die Tabelle.
4. Rechne für jede ebenso veränderte rechte Nachrichtenhälfte vom gegebenen
Bild zum Zwischenergebnis zurück und suche dieses in der Tabelle (Rückwärtsschritt). Ein Treffer bedeutet, dass man eine Kollision gefunden hat.
Fixpunkte Man nutzt Fixpunkte der Kompressionsfunktion f aus, um Kollisionen zu
erzeugen. Man sucht also Zwischenhashwerte h und Nachrichtenblöcke m, für die
gilt f (m||h) = h, sodass man nun unbemerkt Nachrichtenblöcke einbauen kann.
Differentielle Analyse Bei der differentiellen Analyse von auf Blockchiffren basierenden
Hashfunktionen findet man eine Kollision, wenn man eine Ausgabedifferenz mit
dem Wert null finden kann.
69
10.5.1 Praktische Angriffe aus sinnlosen“ Kollisionen
”
Bekannte Angriffe (z. B. gegen den MD5-Hashalgorithmus) erzeugen Kollisionen, bei
denen der Angreifer einen gewissen Teil der Urbilder frei wählen kann, der Rest jedoch
(pseudo-)zufällig aussieht. Trotzdem lassen sich damit realistische Angriffe durchführen,
davon wollen wir nun zwei besprechen.
Dokumentformate
Postscript (und viele andere Dokumentformate) erlauben Statements der Form
if X = Y then TEXT1 else TEXT2.
Sind Werte S, T bekannt, sodass H(if S) = H(if T ), so haben folgende Dokumente
denselben Fingerprint, führen jedoch zu zwei völlig unabhängigen Textausgaben:
• if S = S then TEXT1 else TEXT2
• if T = S then TEXT1 else TEXT2
X.509-Zertifikate für RSA-2048 public keys
Einführend wollen wir kurz den RSA-Aufbau skizzieren und wie man damit Zertifikate erstellen kann. RSA ist ein asymmetrisches Verschlüsselungsverfahren, also wird mit
unterschiedlichen Schlüsseln ver- und entschlüsselt. Der öffentlich Schlüssel zum Verschlüsseln (public key) ist ein Zahlenpaar (e, n), der geheime Schlüssel zum Entschlüsseln
(secret key) lautet (d, n). Hierbei ist n das Produkt zweier großer, unterschiedlicher Primzahlen p und q. Der Wert e mit 1 < e < (p − q)(q − 1) ist teilerfremd zu (p − 1)(q − 1) und
d ist das multiplikative Inverse von e bezüglich des Modulus (p − 1)(q − 1). Ein Sender
kann mit RSA Zertifikate für eine zu sendende Nachricht erstellen, also die Integrität
seiner Nachricht gewährleisten, indem er z. B. einen Hashwert der Nachricht mit dem secret key verschlüsselt. Mithilfe des public keys, welcher dem Sender eindeutig zugeordnet
und öffentlich bekannt sein muss, kann ein Empfänger nun den Hashwert entschlüsseln,
prüfen, ob der Hash der gesendete Nachricht diesem signierten Hashwert entspricht und
sich sicher sein, dass niemand die Daten bei der Übertragung verändert hat, sofern sie
übereinstimmen.
Das Ziel bei diesem Angriff ist nun das Erzeugen von zwei verschiedenen Zertifikaten
mit unterschiedlichem Moduli n, n0 aber demselben Fingerprint. Das Problem ist nun,
dass diese Moduli Primzahl-Produkte sein müssen. Man nimmt an, es seien zwei 1024Bit-Werte q, q 0 gefunden, sodass die entsprechenden Zertifikatanfänge gleiche Hashwerte
haben (dies ist mit dem Angriff von Wang, beschreiben in [WLF+ 05], möglich). Gesucht
ist nun ein b, sodass q · 21024 + b und q 0 · 21024 + b beides gültige RSA-Zahlen sind (also
2048-Bit-Primzahl-Produkte). Dieses b ermittelt man folgendermaßen:
1. Wähle zwei ungefähr 500 Bit große Primzahlen p, p0 .
2. Solange b ≤ 21024 :
70
a) Wähle das minimale b mit p|n = q · 21024 + b und p0 |n0 = q 0 · 21024 + b.
b) Falls n/p oder n0 /p0 nicht prim, erhöhe b um p · p0 .
3. Falls kein passendes b gefunden, wähle neue Primzahlen p, p0 .
Die Erfolgswahrscheinlichkeit pro Iterationsschritt sind ungefähr die Wahrscheinlichkeit,
dass zwei zufällige 1500-Bit-Zahlen prim sind, also ungefähr (1/ log(21500 ))2 ≈ 10−6 . Auf
diese Weise erhält man zwei 2048-Bit-Zahlen, die (bei entsprechendem Zustand der Hashfunktion) auf den ersten 1024 Bit denselben Hashwert liefern (so wurden q, q 0 ja gewählt
und dann per Multiplikation mit 21024 auf die Position der ersten 1024 Bit verschoben).
Auf den zweiten 1024 Bit stimmen sie außerdem überein (da beide das gleiche b haben)
und somit sind zwei verschiedene Zertifikate gefunden worden, die denselben Hashwert
liefern.
71
11 Nachrichten-Authentifikation
11.1 Message Authentication Codes
Ein Message Authentication Code (MAC) ist nach [KL07] ein per symmetrischer Verschlüsselung erzeugter Prüfteil zur Authentifizierung einer gesendeten Nachricht (er dient
der Sicherung vor unbemerkter Manipulation). Es geht nicht um Geheimhaltung – also
findet keine wirkliche Verschlüsselung statt, sondern um Integrität. Selbst beim OneTime-Pad mit perfekter Sicherheit kann man unbemerkt Bits flippen und so z. B. Geldbeträge ändern (falls diese immer an einer festen Position stehen, was bei genau definierten Protokoll ja der Fall sein sollte). Kommen wir nun zu einer etwas formaleren
Definition eines MACs: Gegeben seien endliche Alphabete A, B, die Blocklänge n und
ein Schlüsselraum K. Ein MAC ist gegeben durch eine Familie von Abbildungen
MACk : A∗ → B n mit k ∈ K.
In der Regel gilt A = B = {0, 1}.
Die Anforderungen an einen MAC lauten:
• Gegeben k, muss MACk effizient berechenbar sein.
• Ein effiziente Angreifer mit Orakelzugriff auf MACk (mit zufälligem Schlüssel k)
kann für keine Nachricht m, die er nicht an das Orakel gesendet hat, MACk (m)
berechnen. Ohne Wissen über den Schlüssel kann ein Angreifer also nichts erstellen.
Einige MACs werden im Folgenden kurz vorgestellt.
HMAC
Der HMAC basiert auf einer Hashfunktion, die verschachtelt verwendet und passend
gepaddet wird:
HMACk (m) = Hash((k ⊕ opad) || Hash((k ⊕ ipad) || m)).
Hierbei sind opad ( outer padding“) und ipad ( inner padding“) feste und öffentlich be”
”
kannte Konstanten. Ein innerer Hash reicht nicht, da man bei einer per Merkle-Damgard
erstellten Hash-Funktion, beliebiges an m anhängen könnte und wieder einen gültigen
MAC erhalten würde.
CBC-MAC
Der CBC-MAC basiert im Gegensatz zum HMAC auf einer Blockchiffren. Es wird ein
Klartext m mit dieser Blockchiffren im CBC-Modus mit dem Nullvektor als Initialisierungsvektor verschlüsselt. Der letzte Block dieses Chiffrats ergibt dann den MAC.
72
Achtung: Der CBC-MAC ist bei variabler Nachrichtenlänge formal unsicher! Ein Angriff,
der bei variabler Nachrichtenlänge erfolgen kann, lautet:
1. Erfrage MAC a für Nachricht m = (m1 , ..., mx )
2. Erfrage MAC b für Nachricht n = (a, n1 , ..., ny )
3. Die Nachricht z = (m1 , . . . , mx , 0, n1 , . . . , ny ) hat nun ebenfalls den MAC b
OMAC (One-key MAC)
Der OMAC basiert wie der CBC-MAC auf einer Blockchiffre. Im Wesentlichen ist es der
CBC-MAC mit folgenden Modifikationen:
• Auf den letzten Nachrichtenblock mn wird vor Berechnung des MACs ein schlüsselabhängiger Wert addiert, also z. B. mn ⊕ Enck (0 . . . 0)
• Der MAC ist auch nur ein Teilstring des letzten Chiffrat“-Blocks und nicht der
”
gesamte Block.
Carter-Wegman
Um zu einer Nachricht m der Länge |m| einen MAC s der Länge |s| zu erhalten, wird bei
Carter-Wegman m als Bitvektor interpretiert, eine 1“ angehängt und der entstandene
”
Vektor mit einer (|m| + 1) × |s|-Matrix k (dem Signaturschlüssel) multipliziert. Es gilt
zu beachten, dass jeder Signaturschlüssel nur einmal verwendbar ist!
11.2 Abstreitbare Authentifikation
Man stelle sich folgendes Szenario vor: Man will einer Gruppe von Kommunikationsteilnehmern beweisen, dass man eine Nachricht verfasst hat, aber anschließend, nach erfolgter Authentifikation, soll es diesen nun nicht mehr möglich sein, unbeteiligten Dritten
zu beweisen, wer der Autor dieser authentifizierte Nachricht war. Wie die Lösung dieses
scheinbaren Widerspruchs möglich ist, wird nun erläutert. Anstatt eine Nachricht mi direkt (nicht-abstreitbar) zu signieren, verwendet man MACs mit Zufallsschlüssel ki und
einem Zeitstempel ti . Für einen gewissen Zeitraum kann man nun Nachrichten signieren,
anschließend sollte es jedem möglich sein, Nachrichten zu signieren und zwar wie folgt:
Man sendet ki−1 nicht-abstreitbar signiert zusammen mit der Nachricht mi , also
(mi , MACki (mi ), ti , ki−1 , sign(ki−1 , ti )).
Dann ist die Authentifizierbarkeit erfüllt, erhält man nämlich (mi , MACki (mi )) vor dem
Zeitpunkt ti+1 und später eine gültige Signatur sign(ki , ti+1 ), so ist die Nachricht mi
authentisch. Die Abstreitbarkeit ist aber auch gewährleistet, denn sobald ki öffentlich
ist, kann jedermann beliebige Tupel
(m0i , MACki (m0i ), ti , ki−1 , sign(ki−1 , ti ))
73
berechnen.
Beispiele für die Verwendung von abstreitbarer Authentifikation sind Off-the-Record
Messaging (OTR, für Instant Messaging) und TESLA (ein Broadcasting-AuthentifizierungsProtokoll), welches in [PCTS02] beschrieben wird.
74
Literaturverzeichnis
[BDPR98] Bellare, Mihir ; Desai, Anand ; Pointcheval, David ; Rogaway, Phillip:
Relations among notions of security for public-key encryption schemes. In:
Krawczyk, Hugo (Hrsg.): Advances in Cryptology – CRYPTO 1998 Bd.
1462. Springer Berlin / Heidelberg, 1998. – ISBN 978–3–540–64892–5, S.
26–45
[Bih94]
Biham, Eli: New Types of Cryptanalytic Attacks Using Related Keys. In:
Helleseth, Tor (Hrsg.): Advances in Cryptology – EUROCRYPT 1993 Bd.
765. Springer Berlin / Heidelberg, 1994. – ISBN 978–3–540–57600–6, S.
398–409
[BKR11]
Bogdanov, Andrey ; Khovratovich, Dmitry ; Rechberger, Christian:
Biclique Cryptanalysis of the Full AES. In: Lee, Dong (Hrsg.) ; Wang,
Xiaoyun (Hrsg.): Advances in Cryptology – ASIACRYPT 2011 Bd. 7073.
Springer Berlin / Heidelberg, 2011. – ISBN 978–3–642–25384–3, S. 344–371
[BW00]
Biryukov, Alex ; Wagner, David: Advanced Slide Attacks. In: Preneel,
Bart (Hrsg.): Advances in Cryptology – EUROCRYPT 2000 Bd. 1807. Springer Berlin / Heidelberg, 2000. – ISBN 978–3–540–67517–4, S. 589–606
[CPS08]
Coron, Jean-Sébastien ; Patarin, Jacques ; Seurin, Yannick: The Random
Oracle Model and the Ideal Cipher Model Are Equivalent. In: Wagner,
David (Hrsg.): Advances in Cryptology – CRYPTO 2008 Bd. 5157. Springer
Berlin / Heidelberg, 2008. – ISBN 978–3–540–85173–8, S. 1–20
[Gei09]
Geiselmann, Dr. W.: Datensicherheitstechnik (Signale, Codes und Chiffren
II). Universität Karlsruhe, Institut für Algorithmen und Kognitive Systeme,
2009
[HKT11]
Holenstein, Thomas ; Künzler, Robin ; Tessaro, Stefano: The equivalence of the random oracle model and the ideal cipher model, revisited. In:
Proceedings of the 43rd annual ACM symposium on Theory of computing.
New York, NY, USA : ACM, 2011 (STOC 2011). – ISBN 978–1–4503–0691–
1, S. 89–98
[KL07]
Katz, Jonathan ; Lindell, Yehuda: Introduction to Modern Cryptography
(Chapman & Hall/Crc Cryptography and Network Security Series). Chapman & Hall/CRC, 2007. – ISBN 1584885513
[Luc04]
Lucks, Stefan: Design Principles for Iterated Hash Functions. Cryptology
ePrint Archive, Report 2004/253, 2004
75
[MH81]
Merkle, Ralph C. ; Hellman, Martin E.: On the security of multiple
encryption. In: Commun. ACM 24 (1981), Juli, Nr. 7, S. 465–467. http:
//dx.doi.org/10.1145/358699.358718. – DOI 10.1145/358699.358718. –
ISSN 0001–0782
[NP10]
Nandi, Mridul ; Paul, Souradyuti: Speeding Up the Wide-Pipe: Secure and
Fast Hashing. In: Gong, Guang (Hrsg.) ; Gupta, Kishan (Hrsg.): Progress
in Cryptology – INDOCRYPT 2010 Bd. 6498. Springer Berlin / Heidelberg,
2010. – ISBN 978–3–642–17400–1, S. 144–162
[OW06]
Oorschot, Paul van ; Wiener, Michael: A Known-Plaintext Attack on
Two-Key Triple Encryption. In: Damgård, Ivan (Hrsg.): Advances in Cryptology – EUROCRYPT 1990 Bd. 473. Springer Berlin / Heidelberg, 2006. –
ISBN 978–3–540–53587–4, S. 318–325
[PCTS02] Perrig, Adrian ; Canetti, Ran ; Tygar, J. D. ; Song, Dawn: The TESLA
Broadcast Authentication Protocol. 2002
[WLF+ 05] Wang, Xiaoyun ; Lai, Xuejia ; Feng, Dengguo ; Chen, Hui ; Yu, Xiuyuan: Cryptanalysis of the Hash Functions MD4 and RIPEMD. In: Cramer,
Ronald (Hrsg.): Advances in Cryptology – EUROCRYPT 2005 Bd. 3494.
Springer Berlin / Heidelberg, 2005. – ISBN 978–3–540–25910–7, S. 551–551
[WYY05] Wang, Xiaoyun ; Yin, Yiqun L. ; Yu, Hongbo: Finding Collisions in the
Full SHA-1. In: In Proceedings of Crypto, Springer, 2005, S. 17–36
76

Documentos relacionados