Konstruktion von Hashfunktionen

Transcription

Konstruktion von Hashfunktionen
Diplomarbeit
Konstruktion von Hashfunktionen
Mohammed Meziani
Technische Universität Darmstadt
Fachbereich Informatik
Fachgebiet Theoretische Informatik – Kryptographie und Computeralgebra
angefertigt bei:
Prof. Dr. Johannes Buchmann
Betreut von:
Dipl.-Math. Erik Dahmen
13. August 2007
2
Selbstständigkeitserklärung
Hiermit erkläre ich, dass ich die vorliegende Diplomarbeit selbständig verfasst und
keine anderen Hilfsmittel als die angegebenen Quellen verwendet habe. Weiter erkläre
ich, die Diplomarbeit in gleicher oder ähnlicher Form keiner anderen Prüfungsbehörde
vorgelegt zu haben.
Darmstadt, den 13.08.2007
Mohammed Meziani
3
Danksagung
Ich möchte mich an dieser Stelle bei Herrn Prof. Dr. Johannes Buchmann für die
Vergabe des äußerst interessanten Diplomthemas bedanken. Dipl.-Math. Erik Dahmen möchte ich für die hilfreiche Betreuung und tatkräftige Unterstützung danken.
Weiterhin bedanke ich mich bei allen Personen, die mir durch ihre Unterstützung geholfen haben, diese Arbeit zu erstellen.
Ein besonders herzlicher Dank geht an meine Eltern, die mir dieses Studium finanziell
ermöglicht haben und mir während des gesamten Studiums hilfreich und unterstützend
zur Seite standen.
Mohammed Meziani
4
Inhaltsverzeichnis
1 Einleitung
10
1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 Struktur der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 kryptographische Hashfunktionen und ihre Anwendungen
2.1 Hashfunktionen und Ihre Eigenschaften . . . . . . . . .
2.1.1 Definitionen . . . . . . . . . . . . . . . . . . . .
2.1.2 Eigenschaften von Hashfunktionen . . . . . . .
2.1.2.1 Allgemeine Eigenschaften . . . . . . .
2.1.2.2 Sicherheitseigenschaften . . . . . . . .
2.2 Generische Angriffe auf Hashfunktionen . . . . . . . . .
2.3 Anwendungen von Hashfunktionen . . . . . . . . . . .
2.3.1 Passwortschutz . . . . . . . . . . . . . . . . . .
2.3.2 Datenintegrität . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
12
12
13
14
14
16
17
17
18
3 Die Merkle-Damgård Konstruktion
3.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Allgemeiner Aufbau . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1 Iterative Konstruktion . . . . . . . . . . . . . . . . . . .
3.2.2 Merkle-Damgård-Konstruktion . . . . . . . . . . . . . .
3.3 Schwächen vom MD-Konstruktion . . . . . . . . . . . . . . . . .
3.3.1 Länge-Verlängerung (Length Extension) . . . . . . . . .
3.3.2 Kollision bei Nachrichtenteilen (Partial-message-collision)
3.4 Angriffe auf die MD-Konstruktion . . . . . . . . . . . . . . . . .
3.4.1 Geburtstagsangriff . . . . . . . . . . . . . . . . . . . . .
3.4.2 Multikollision-Angriff (Joux-Angriff) . . . . . . . . . . .
3.4.3 Kelsey-Schneier 2nd -Preimage-Angriff . . . . . . . . . . .
3.4.3.1 Die Erzeugung von expandierbaren Nachrichten
3.4.3.2 Das Finden eines zweiten Urbildes . . . . . . .
3.4.4 Herding-Angriff . . . . . . . . . . . . . . . . . . . . . . .
3.5 Alternative Konstruktionen . . . . . . . . . . . . . . . . . . . .
3.5.1 Luks’s Konstruktionen . . . . . . . . . . . . . . . . . . .
3.5.1.1 Wide-Pipe-Hashfunktion . . . . . . . . . . . . .
3.5.1.2 Double-Pipe-Hashfunktion . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
19
19
19
21
25
25
26
27
27
30
34
34
36
36
40
40
40
42
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inhaltsverzeichnis
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
47
49
52
52
56
60
4 Blockchiffren-basierte Hashfunktionen
4.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Grundlagen und Definitionen . . . . . . . . . . . . . . . .
4.3 Single-Block-Length Konstruktionen . . . . . . . . . . . .
4.3.1 Beispiele als Motivation . . . . . . . . . . . . . . .
4.3.1.1 Matyas-Meyer-Oseas-Verfahren . . . . . .
4.3.1.2 Davies-Meyer-Verfahren . . . . . . . . . .
4.3.1.3 Miyaguchi-Preenel-Verfahren . . . . . . .
4.3.2 Preneel-Govaets-Vandewalle-Konstruktionen (PGV)
4.3.2.1 PGV-Analyse . . . . . . . . . . . . . . . .
4.3.2.2 ICM-Analyse . . . . . . . . . . . . . . . .
4.3.2.2.1 Kollisionsresistenz . . . . . . . .
4.3.2.2.2 Preimage-Resistenz . . . . . . . .
4.3.2.2.3 2nd -Preimage-Resistenz . . . . . .
4.4 Double-Block-Length Konstruktionen . . . . . . . . . . . .
4.4.1 MDC-2 und MDC-4 . . . . . . . . . . . . . . . . .
4.4.2 Parallel Davies-Meyer (Parallel-DM) . . . . . . . .
4.4.3 Yi-Lam-Hash . . . . . . . . . . . . . . . . . . . . .
4.4.4 Nandi-Hash . . . . . . . . . . . . . . . . . . . . . .
4.4.5 Hirose-Hash . . . . . . . . . . . . . . . . . . . . . .
4.4.5.1 ROM-Konstruktion . . . . . . . . . . . . .
4.4.5.2 ICM-Konstruktion . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
65
65
66
70
71
71
72
74
74
76
79
85
89
89
91
91
93
95
97
100
101
106
3.6
3.5.2 3C und 3C-X Hashfunktionen . . . . . . .
3.5.3 Randomisiertes Hashing : RMX-Transform
Konkrete Beispiele . . . . . . . . . . . . . . . . .
3.6.1 MD-Hashfunktionen . . . . . . . . . . . .
3.6.2 SHA-Hashfunktionen . . . . . . . . . . . .
3.6.3 Tiger . . . . . . . . . . . . . . . . . . . . .
. .
.
. .
. .
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
5 Zusammenfassung
108
5.1 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
5.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
A Anhang
111
A.1 Grundlagen der Wahrscheinlichkeitstheorie . . . . . . . . . . . . . . . . 111
A.2 Geburtstagsangriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Literaturverzeichnis
118
Index
124
6
Abbildungsverzeichnis
3.1
3.2
3.3
3.4
3.5
3.6
3.7
Die iterative Hashberechnung. . . . . . . . . .
Schematische Darstellung des Joux-Angriffs. .
Die Erstellung einer Diamantstruktur. . . . .
Die Wide-Pipe-Hashfunktion. . . . . . . . . .
Die Double-Pipe-Hashfunktion. . . . . . . . .
Die einfachste Variante der 3C-Hashfunktion.
Die Tiger-Kompressionsfunktion. . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20
31
38
41
44
48
62
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
Die Matyas-Meyer-Oseas-Hashfunktion. . . . . . . .
Die Davies-Meyer-Hashfunktion. . . . . . . . . . . .
Die Miyaguchi-Preenel-Hashfunktion. . . . . . . . .
Schematische Darstellung der PGV-Konstruktionen.
Die MDC-2 Kompressionsfunktion. . . . . . . . . .
Die MDC-4 Kompressionsfunktion. . . . . . . . . .
Die Parallel Davies-Meyer-Hashfunktion. . . . . . .
Die Yi-Lam-Hashfunktion. . . . . . . . . . . . . . .
Die 1/3-Rate Nandi-Hashfunktion. . . . . . . . . .
Die Double-Length Hashfunktion von Hirose. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
72
73
74
75
92
94
95
96
100
107
7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tabellenverzeichnis
3.1
Die Eigenschaften der SHA-2 Familie. . . . . . . . . . . . . . . . . . . . 57
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
PGV-Angriffe auf die 64 Konstruktionen. .
Die 12 sichere PGV-Hashfunktionen. . . .
Die 20 ICM-sichere PGV-Hashfunktionen. .
Methoden zur Konstruktion von Knoten und
Die
Die
Die
Die
Die
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
Kanten eines Graphs. . . . . .
Kollisionsresistenz der 20 PGV-Konstruktionen. . . . . . . . . . .
Preimage-Resistenz der 20 PGV-Konstruktionen. . . . . . . . . . .
2nd -Preimage-Resistenz der 20 PGV-Konstruktionen mit Plain-Pad.
2nd -Preimage-Resistenz der 20 PGV-Konstruktionen mit MD-Pad.
Sicherheistniveaus der 20 sicheren PGV-Konstruktionen. . . . . . .
8
78
78
80
85
90
90
90
90
91
Algorithmenverzeichnis
1
2
3
4
Multi-Geburtstagsangriff . .
2k -Kollisionsfinder . . . . . .
KaskadKollision(h, h0 , n, n0 )
FindeEineKollision(t, hin ) . .
.
.
.
.
.
.
.
.
.
.
.
.
5
6
SimulateOracles(A, n) . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
GraphDrawing(A, n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
9
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
30
31
33
35
Kapitel 1
Einleitung
1.1 Motivation
Bei digital elektronischem Datenaustausch wird häufig über die digitale Unterschrift
(auch digitale Signatur) geredet, welche nicht als eine handgeschriebene Unterschrift
zu sehen ist. Man möchte damit ein Mittel gegen Verfälschungen haben. Vereinfacht
man unter einer digitalen Unterschrift eine Zahl, die im Zusammenhang mit einer
digitalen Nachricht ähnliche Eigenschaften aufweist wie eine Unterschrift von Hand
auf einem Dokument aus Papier.
In der Regel basieren die digitale Signaturen auf asymmetrischen Verfahren. Dabei
wird mit dem privaten Schlüssel unterschrieben und mit dem öffentlichen Schlüssel
die Signatur auf Echtheit überprüft. Grundsätzlich wird das Signatureverfahren immer auf die gesamte Nachricht angewendet, welche mit der dazugehörigen Signatur
zusammen geschickt wird. Bei grossen Nachrichten (mit einer grossen Bitlänge) werden die erzeugten Signaturen recht unhandlich, weil sie die gleiche Länge haben wie
die Nachricht selbst. Um dieses Problem zu umgehen, wird nie eine ganze Nachricht
signiert. Stattdessen wird aus der Nachricht eine Prüfsumme von übersichtlicher Länge
berechnet und nur diese signiert. Eine solche Prüfsumme wird anhand der sogenannten Hashfunktionen erzeugt. Eine Hashfunktion bildet aus einem Dokument beliebiger Länge einen Wert fester Länge, den sogenannten Hashwert (auch Hash-Wert). Die
Bezeichnung Hash stammt von dem altfranzösischen hachis für das Gehacktes beim
Metzger.
Mathematisch gesehen besitzt eine Hashfunktion einen unendlichen Definitionsbereich
(die Menge aller Dokumente) und einen endlichen Wertebereich. Das bedeutet, dass
die Eingabe und die Ausgabe eine unterschiedliche Mächtigkeit haben. Diese Eigenschaft stellt eine grosses Problem dar. Mehrere verschiedene Dokumente können den
gleichen Hashwert haben, Kollisionen genannt, und daher auch gleiche Signaturen,
was aber in kryptographischen Fälle zu unerwünschten Sicherheitsprobleme führt. Ein
bösartiger Partner kann in diesem Fall die Gelegenheit ausnutzen, für ein eigentliches
Dokument ein anderes erzeugen, dessen Hashwert mit dem eigentlichen übereinstimmt.
Mit anderen Worten soll eine ein-eindeutige Beziehung zwischen einer Nachricht und
10
Kapitel 1 Einleitung
ihrem Hashwert gegeben sein. Dies geschieht, wenn die Hashfunktion spezifischen Sicherheitseigenschaften aufweist.
Es gibt eine Menge von Hashfunktionen, welche sich in ihren Implementierungen
unterscheiden und jedoch in ihrem Design nach demselben theoretischen Prinzip,
Merkle-Damgård-Prinzip bezeichnet, konstruiert sind. Das Ziel dieser Arbeit ist es, das
Konzept zunächst der Konstruktion von Hashfunktionen nach dem Merkle-DamgårdPrinzip zu verdeutlichen und die darauf mögliche durchfürbaren Angriffe voruzustellen.
Als Anwendung solches Prinzips wird eine Klasse von Hashfunktionen vorgestellt und
untersucht.
1.2 Struktur der Arbeit
Die vorliegende Diplomarbeit ist folgendermaßen aufgebaut:
• Kapitel 2 gibt eine Einführung in Hashfunktionen, ihre Eigenschaften und ihre
Anwendungen.
• Kapitel 3 befasst sich zunächst mit dem Merkle-Damgård Designprinzip sowie
seinen Schwäche und die daraus neu entwickelten Angriffsmethoden. Danach
werden einige Alternative vorgestellt und diskutiert. Am Ende werden konkrete
Beispiele gegeben und ihre aktuellen Sicherheitszustände besprochen.
• Kapitel 4 stellt die auf Blockchiffren basierenden Hashfunktionen vor, welche
aus zwei wichtigen Kategorien bestehen, den Single und Double Block-Length
Hashfunktionen. Zu dem Single Block-Length Typ gehören besonders die PGVKonstruktion. Diese werden vorgestellt und auf ihre Sicherheit in zwei Sicherheitsmodelle, das Black-Box und das ideal Cipher Modell, hin untersucht. In
dem letzten Teil dieses Kapitels werden verschiedene Double Block-Length Hashfunktionen vorgestellt und ihre Sicherheit besprochen.
• Kapitel 5 gibt eine Zusammenfassung der vorliegenden Arbeit sowie einen Ausblick.
• Anhang gibt zunächst eine Einführung in die Wahrscheinlichkeitstheorie und
dann Beweise für einige Theoreme des dritten Kapitels.
11
Kapitel 2
kryptographische Hashfunktionen und
ihre Anwendungen
Bisher wurde nichts darüber gesagt, wie eine Hashfunktion konkret aussehen könnte.
Wie bereits im vorhergehenden Kapitel erwähnt, soll bei digitalen Signaturen praktisch unmöglich sein, eine zweite Nachricht zu erzeugen, für die diese Signatur ebenfalls gültig ist. Das impliziert, dass die Sicherheit einer digitalen Signatur immer von
der von der kryptographischen Stärke der verwendeten Hashfunktion abhängt. Diese
muss bestimmte Eigenschaften besitzen, welche auch zu anderen Verwendungszwecke
benötigt sind. In diesem Kapitel werden wir uns mit der wesentlichen Grundkriterien der Hashfunktionen sowie mit ihren aktuellen Anwendungen beschäftigen. Entlang
dieses Kapitels werden die folgende Bezeichnungen verwendet:
• X = {0, 1}∗ bezeichnet die Menge aller Bitstrings bzw. Nachrichten beliebiger
Länge.
• Y = {0, 1}n bezeichnet die Menge aller Bitstrings bzw. Nachrichten der Länge
n, wobei n eine natürliche Zahl ist.
2.1 Hashfunktionen und Ihre Eigenschaften
2.1.1 Definitionen
Definition 2.1 (Einwegfunktion (One-Way-Function))
Eine Einwegfunktion ist eine mathematische Funktion, deren Funktionswerte leicht“
”
berechenbar und deren Urbilder jedoch schwer“ sind .
”
In der Komplexitätstheorie sind die Begriffe leicht“ oder schwer“ berechenbar genau
”
”
erklärt. Unter leicht“ verteht man, dass zur Berechnung der Funktionswerte einen po”
lynomialen Aufwand benötigt wird . Als schwer bedeutet hier, dass kein Algorithmus
”
”
existiert, welcher in akzeptabler Zeit die Urbilder bestimmt.
12
Kapitel 2 kryptographische Hashfunktionen und ihre Anwendungen
Beispiele:
• In einem gedruckten Telefonbuch ist es sehr einfach, mit einem Namen die passende Telefonnummer herausfinden, da die Namen alphabetisch sortiert sind,
dagegen ist es nur sehr schwer möglich, zu einer Telefonnummer den passenden
Namen zu finden.
• In der Zahlentheorie stellt die Multiplikation großer Primzahlen eine Einwegfunktion dar. Es ist schwierig, eine Primfaktorzerlegung für eine vordefinierte
Zahl zu finden.
Definition 2.2 (Falltürfunktion (Trapdoor-Funktion))
Eine Falltürfunktion ist eine Einwegfunktion, deren Invserse mit Hilfe einer geheimen
Information relativ leicht zu ermitteln..
Beispiel: Die Quadrierungsfunktion x → x2 mod n mit n = p · q, wobei p und q
bekannt sind, ist eine Falltürfunktion. Die geheime Information hier ist die Kenntnis
der Zerlegung von n.
Die Einwegfunktionen sind also von der mathematischen Seite her die Grundlage für
Verschlüsselung und auch für die Nutzung von Hashfunktionen, die eine Basis für die
Anwendung von digitalen Signaturen sind.
Definition 2.3 (Hashfunktion)
Eine Hashfunktion h ist eine Funktion, die effizient zu einem gegebenen Bitstring x beliebiger Länge ein Bitstring y = h(x), Hashwert genannt, mit fester Länge (bezeichnet
mit n) berechnet (Komprimierung oder Kompression).
Mathematisch ausgedrückt sieht die Hashfunktion so aus:
h : X → Y : x → h(x) = y.
Der Komprimierunsvorgang führt dazu, diese Hashfunktion nicht injektiv ist. Es existieren zwei verschiedene Bitstring x0 und xaus X, deren Hashwerte übereinstimmen.
d.h h(x) = h(x0 ). Solche Bitstrings werden Kollisionen genannt, deren Zustandekommen theoretisch nicht auszuschließen ist. In der Praxis soll dies aber eine schwierige
Aufgabe sein. Deswegen soll die Hashfunktion so konstruiert, dass ein Ereignis der
Form {h(x) = h(x0 ) : x 6= x0 } mit einer geringer Wahrscheinlichkeit vorkommt.
2.1.2 Eigenschaften von Hashfunktionen
Eine Hashfunktion h ist eine Funktion, welche jedes Bitstring x mit beliebiger Länge
(x ∈ X) auf ein Bitstring h(x) mit fest vorgegebener Länge n abbildet (h(x) ∈ Y ).
13
Kapitel 2 kryptographische Hashfunktionen und ihre Anwendungen
Sie muss eine Reihe von Kriterien bzw. Eigenschaften erfüllen, damit sie in der Praxis
eingesetzt werden kann.
2.1.2.1 Allgemeine Eigenschaften
1. Effizienz:
Da eine Hashfunktion auf Bitstrings beliebiger Länge angewendet wird, darf der
Rechenaufwand in Abhängigkeit von der Länge dieser Bitstrings nicht zu stark
steigen. Das heißt, die Hashwerte müssen leicht und relativ schnell berechenbar
sein.
2. Zufälligkeit und Gleichverteilung:
Eine Hashfunktion soll sich wie eine echte“ Zufallsfunktion verhalten. Die er”
zeugte Hashwerte müssen zufällig und gleichmäßig verteilt über den Wertbereich
sein, d.h jeder mögliche Hashwert aus Y soll mit einer Wahrscheinlichkeit 1/2n
vorkommen. Für zwei ähnliche Bitstrings sollen sich völlig verschiedene Hashwerte ergeben werden. Sonst hätte ein Angreifer bei bestimmten Hashwerte, welche
öfter auftreten, eine günstige Gelegenheit, durch Raten und Probieren ein Urblid zum Hashwert zu ermitteln. Damit die Hashfunktion die GleichverteilungEigenschaft aufweist, soll sie den so genannten Avalanche-Effekt besitzen. Der
Avalanche-Effekt besagt, dass bei jeder Änderung der Eingabe sich durchschnittlich die Hälfte der Ausgabebits verändern [44, 63].
2.1.2.2 Sicherheitseigenschaften
Damit eine Hashfunktion in der Kryptographie als sicher gilt, muss sie noch zusätzliche
Eigenschaften bzw. Anforderungen erfüllen, die im Folgenden nach [44] dargestellt
werden. Betrachten wir eine Hashfunktion h : X → Y .
1. Einwegfunktion:
h heißt Einwegfunktion, wenn es rechnerisch unmöglich ist, zu einem gegebenen
Hashwert y, eine beliebiges Bitstring x zu finden, mit h(x) = y. Die Eigenschaft
wird auch als Preimage-Resistenz (preimage resistance) bezeichnet.
2. Schwache Kollisionsresistenz:
h wird als schwach kollisionsresistent bezeichnet, wenn es ebenfalls unmöglich
ist, zu einem vorgegebenen Bitstring x ein x0 , x 6= x0 , mit h(x) = h(x0 ) zu finden. Diese Eigenschaft wird auch zweite Preimage-Resistenz( 2nd -preimage
resistance) genannt. Im Gegensatz zur Einweg-Eigenschaft wird hier zusätzlich
zu einem Hashwert das entsprechende Bitstring vorgegeben.
3. Starke Kollisionsresistenz:
h heißt stark kollisionsresistent, wenn es praktisch unmöglich ist, zwei beliebige
14
Kapitel 2 kryptographische Hashfunktionen und ihre Anwendungen
Bitstrings x, x0 mit x 6= x0 zu finden, die denselben Hashwert haben, d.h h(x) =
h(x0 ). Diese Eigenschaft wird auch Kollisionsresistenz (collision resistance)
genannt.
Bemerkungen
1. Die starke Kollisionsresistenz kann auch wie folgt definiert werden:
h heißt stark kollisionsresistent, wenn h schwach kollisionsresistent für alle x ∈ X
ist. Damit stellt die schwache Kollisionsresistenz eine lokale Eigenschaft dar, im
Gegensatz zur globalen Eigenschaft der starken Kollisionsresistenz. Daraus folgt,
dass die starke Kollisionsresistenz die schwache Kollisionsresistenz impliziert.
2. Die schwache Kollisionsresistenz und die Einwegfunktion sehen zwar so ähnlich
aus, aber sie sind im allgemeinen unvergleichbar. Eine schwach kollisionsresistente Hashfunktion ist nicht notwendigerweise eine Einwegfunktion und umgekehrt.
Es gilt jedoch eine Implikation unter bestimmten Voraussetzung und zwar falls
jedes y ∈ Y mindestens zwei Urbilder aus X unter h besitzt und h schwach kollisionsresistent ist, dann ist h eine Einwegfunktion . Nehmen wir an, dass h keine
Einwegfunktion ist. Für eine h(x) ∈ Y mit x ∈ X existiert nicht ein x0 ∈ X, so
dass h(x0 ) = h(x) gilt. Da die Untermenge h−1 (h(x)) mindestens zwei Elemente
aus enthält, folgt daraus, dass die Wahrscheinlichkeit für x 6= x0 sehr groß ist.
Damit werden Kollisionen gebildet.
3. Neben der vorhergehenden Sicherheitseigenschaften wurde zusätzliche Kriterien
sowie ihre Zusammenhänge und Implikationen von Rogaway und Schripmton in
[60] ausführlich untersucht.
Definition 2.4 (kryptographische Hashfunktion)
Eine kryptographische Hashfunktion ist eine Einwegfunktion, die stark kollisionsresistent ist.
Namensgebung
Leider ist die Name kryptographische Hashfunktion“ in der Literatur unübersichtlich.
”
Es gibt unzählige Bezeichnungen, welche statt kryptographischer Hashfunktion verwendet werden. Einige davon sind folgende:
• Fingerprint,
• Data Integrity Check (DIC),
• Message Digest (MD),
• Manipulation Detection Code (MDC),
• Compression Function,
• Contraction Function.
15
Kapitel 2 kryptographische Hashfunktionen und ihre Anwendungen
2.2 Generische Angriffe auf Hashfunktionen
Nachdem wir uns mit der wichtigsten Eigenschaften von (kryptographischen) Hashfunktionen beschäftigt haben, fragen wir uns erst einmal, wie ein Angriff auf Hashfunktionen aussehen kann. Die Sicherheit einer Hashfunktion hängt vor allem von der
Länge der erzeugten Hashwert n. Ein zu kurzer Hashwert ermöglicht eine schnellere
Suche in Y und bietet keine Sicherheit. Wir wollen nur die Sicherheit einer Hashfunktion h im Bezug auf der drei Eigenschaften in Abhängigkeit von n untersuchen. Zu
diesem Zweck gehen wir davon aus, dass die Hashfunktion ideal“ ist. Ideal bedeutet
”
hier, dass die Hashfunktion alle bereits vorgestellten Eigenschaften erfüllt.Versuchen
wir also den Aufwand in Abhängigkeit von n abzuschätzen. Da jedes Btring x wird auf
einen zufällig gleichmäßig verteilten Hashwert abgebildet wird, folgt daraus, dass die
Wahrscheinlichkeit zu einem vorgegebenen y ein Bitstring x zu finden mit h(x) = y,
1/2n beträgt. Das heißt, es müssen mindestens 2n Bistrings aus X getestet werden,
damit die Einwegfunktion bzw. die schwach Kollisionsresistenz-Eigenschaft verletzt
wird. Bei der starken Kollisionsresistenz müssen zwei beliebige Bitstring gesucht werden, die denselben Hashwert liefern. Um den Aufwand in diesem Fall zu ermitteln,
wird den so genannten Geburtstagsangriff (Abs.3.4.1) benötigt, welchen wir im Kapitel 3 behandeln werden. Der besagt, dass zu Finden einer Kollision müssen mindestens
2n/2 Hashwerte geprüft werden.
Ein Angriff, welche zum Finden der Kollisionen bzw. Urbilder verwendet wird, heisst
ein Kollisionsangriff (Collision-Attack) bzw. ein Preimage-Angriff (Preimage-Attack).
Die beiden Angriffe lassen sich theoretisch mit dem Rohen-Gewalt-Angriff (Brute
Force-Angriff ) realisieren. Darunter versteht man das Ausprobieren aller möglichen
Kombinationen von Nachrichten, bis ein richtige Nachricht gefunden wurde. Solche
Angriffsmethode kann auf verschlüsselte Dateien, Nachrichten und Informationen oder
auch auf Passwörter angesetzt werden. Die Einfachheit dieser Angriffsmethode hat offensichtlich einen Nachteil: Die Durchführung ist rechen- und somit zeitaufwändig.
Definition 2.5 (Kollisionsangriff)
Eine Kollisionsangriff ist ein Angriff auf eine Hashfunktion h mit dem Ziel zwei Nachrichten x und x0 mit x0 6= x zu finden, die denselben Hashwert liefern. Formal heißt
das
Gesucht : x und x0 mit x0 6= x, so dass gilt : h(x0 ) = h(x).
Definition 2.6 (Preimage-Angriff)
Ein Preimage-Angriff ist ein Angriff auf eine Hashfunktion h mit dem Ziel zu einer
gegebenen Nachricht (preimage) eine weitere Nachricht zu finden, die den gleichen
16
Kapitel 2 kryptographische Hashfunktionen und ihre Anwendungen
Hashwert liefert. Formal heißt das
Gegeben : eine Nachricht x mit dazugehörigem Hashwert h(x).
Gesucht : x0 6= x, so dass gilt : h(x0 ) = h(x).
Die Preimage-Angriffe sind viel schwerer durchzuführen als Kollisionsangriffe. Bei idealen Hashfunktionen ist der Gesamtaufwand mit Preimage-Angriffe um den Faktor 2n/2
höher als mit Kollisionsangriffe.
In der Realität ist es tatsächlich noch nicht bewiesen, ob überhaupt ideale Hashfunktionen existieren. Das bedeutet nicht dass, es immer möglich ist, auf jeder beliebigen
Hashfunktion ein Kollisionsangriff bzw. ein Preimage durchzuführen. Es gibt nämlich
Hashfunktion, für die keine Kollisionen oder Urbilder erzeugt werden können. Die Widerstandsfähigkeit solcher Hashfunktionen gegen diese zwei Arten von Angriffe wird
durch das so genannte Sicherheitsniveau (security level) beschrieben, welches wir folgt
definiert ist.
Definition 2.7 (Sicherheitsniveau)
Das Sicherheitsniveau einer Hashfunktion ist die Anzahl der benötigten Berechnungen
bzw. Rechenoperationen, die zum Finden einer Kollision mit dem besten bekannten
Kollisionsangriff führen. Im kryptographischen Sinne wird dieser Begriff auch die Komplexität genannt.
Nach heutigem Stand der Sicherheit von Hashfunktionen bezeichnet die Zahl 280 das
minimale Sicherheitsniveau. Das bedeudet, dass der Hashwert einer Hashfunktion mindestens die Länge 160 Bit besitzen sollte.
2.3 Anwendungen von Hashfunktionen
Kryptographische Hashfunktionen kommen in vielen Bereichen der IT-Sicherheit zum
Einsatz. Wir wollen hier zwei wichtige Beispiele aus der Praxis vorstellen.
2.3.1 Passwortschutz
Bei passwortgeschützten Systemen werden die Hashfunktionen häufig eingesetzt. Jedes eingegebene Passwort wird zunächst unter Verwendung einer Hashfunktion gehasht und danach in einer bestimmten Passwortdatei des Systems gespeichert. Dank
der Einwegfunktion wird das Originalpasswort nicht mehr möglich wiederherzustellen.
Beim Einloggen wird das eingegebene Passwort abgebildet und mit dem gespeicherten
Hashwert verglichen. Sind diese gleich, so stimmen die Passwörter überein und wird
17
Kapitel 2 kryptographische Hashfunktionen und ihre Anwendungen
der Zugriff auf das System gestattet. Erhält ein Angreifer den Zugriff irgendwie auf die
Passwortdatei, so kann er trotzdem kein einziges Originalpasswort rekonstruieren. Ein
Beispiel für das Passwortschutz findet man in Standard-Linux-Distributionen, in denen
die Datei /etc/passwd die Liste aller Benutzernamen zusammen mit den Hashwerte
darstellt.
2.3.2 Datenintegrität
Unter Datenintegrität (auch Datenkonsistenz ) versteht man eine Sicherheitsmaßnahme, die dafür sorgt, dass Daten während der Übertragung vor Verlust sowie vor unautorisierter Modifikationen geschützt werden. Ein Angreifer, der sich zwischen zwei
kommunizierenden Partner befindet, könnte die übertragende Daten manipulieren wollen. Um festzustellen, dass die bei Empfänger eingetroffenen Daten unverändert sind,
kann eine Hashfunktion eingesetzt werden, indem zusätzlich zu Daten der Hashwert
über einen sicheren Kanal transportiert wird. Nach der Übertragung wird der Hashwert erneut berechnet und mit dem übermittelten Hashwert verglichen. Stimmen
diese überein, so wurden die Daten nicht verändert. Falls keinen sicheren Kanal vorliegt, dann muss der Hashwert zunächst mit einem Signatureverfahren signiert und
danach übermittelt werden. Wurde der signierte Hashwert manipuliert, so ist die Signatur ungültig. Ein Beispiel dafür ist der Download von Software, deren Hashwerte
bekannt sein oder veröffentlicht werden müssen. Das Ziel hier ist, sicherzustellen, die
Software nicht mit einem Virus verseucht wurde. Es gibt eine Menge von Software,
welche besonders zur Offline Sicherung der Datenintegrität entwickelt wurden. Ein
Beispiel ist die Software von der Firma Tripwire Inc.[80].
18
Kapitel 3
Die Merkle-Damgård Konstruktion
3.1 Einleitung
Die Konstruktion von Hashfunktionen ,welche alle im Kapitel 2 vorgestellten Anforderungen besitzen sollen, ist keine leichte Aufgabe. Ein schwieriger Teil dieser Aufgaben
besteht allerdings darin, dass sie auf beliebigen Eingabegrößen operieren sollen und
dabei ihre Eigenschaften nicht verlieren dürfen.
Weiterhin ist es schwierig, eine Hashfunktion auf eine bestimmte Eigenschaft zu untersuchen. Woher weiß man, dass eine Hashfunktion, die sicher kryptographisch erscheint,
auch wirklich sicher ist. Die einzige zurzeit verfügbare Methode ist, die Funktion zu
veröffentlichen und durch Kryptographen brechen zu lassen.
Um sichere Hashfunktionen einzubauen, Ivan Damgård [16]und Ralf Merkle[46, 45] haben ein Konstruktionsprinzip für die Erstellung sicherer Hashfunkktionen, unabhängig
voneinander im Jahr 1989 entdeckt und in CRYPTO’89 vorgestellt. Diese Vorgehensweise ist heute die Grundarchitektur beinahe aller Hashfunktionen. Die Grundidee
besteht darin, eine Hashfunktion für beliebig lange Eingaben dadurch zu realisieren,
dass man eine Funktion ,die so genannte ,,Kompressionsfunktion”, für Eingaben fester
Länge iteriert. Solche Hashfunktionen werden iterative Hashfunktionen gennant.
3.2 Allgemeiner Aufbau
3.2.1 Iterative Konstruktion
Für das Verständnis der iterativen Konstruktion von Hashfunktion brauchen wir
zunächst noch einiges an Grundlagen wie etwa das Konzept der Kompressionsfunktionen und ihre Anwendungen. Unter einer Kompressionsfunktion oder Komprimierungs-
19
Kapitel 3 Die Merkle-Damgård Konstruktion
funktion versteht man eine Funktion, die Bitstrings einer festen Länge auf Bitstrings
fester kürzerer Länge abbildet. Mathematisch ist sie wie folgt definiert :
f : {0, 1}m → {0, 1}n ,mit m > n ≥ 2.
Existiert so eine Funktion, bezeichnet mit f , so lässt sich die Hashberechnung nach
einer iterativen Methode durchführen. Diese erfolgt in drei Schritten, wie in der Abblidung 3.1 verdeutlicht und im Folgenden erklärt wird.
Abbildung 3.1: Die iterative Hashberechnung.
1. Vorbereitungsphase:
Jede Nachricht m wird in k Blöcke mi , i = 1 . . . k mit je b Bit geteilt. Falls
die Nachrichtlänge kein Vielfaches von b ist, dann müssen üblicherweise noch
zusätzlichen Bits an die Nachricht angehängt werden. Diese Bits werden PaddingBits gennant . Damit der Hashwert dieser Nachricht sich von anderen Hashwerte unterscheidet, wird oft ein zusätzlicher Block angehängt, welcher aus
der Binäredastellung der ursprünglichen Nachricht besteht. Diese Technick wird
als MD-strengthening [62, 44] bezeichnet.
20
Kapitel 3 Die Merkle-Damgård Konstruktion
2. Berechnungsphase:
Gegeben sei einen Initialwert h0 = IV. Nach der Vorbereitungsphase wird die
Nachricht blockweise bearbeitet. Jeder Block mi wird mit dem Ergebnis hi−1 der
vorhergehenden Iteration als Input für die Kompressionsfunktion f benutzt, um
das neue Zwischenergebnis hi zu bereschnen. Der ganze Ablauf sieht wie folgt
aus:
h0 = IV,
hi = f (hi−1 , mi ) , i = 1, . . . , t.
Wobei die Zahl t die Blöckeanzahl der Nachricht nach dem Paddingsvorgang
bezeichnet.
3. Ausgabetransformation:
Dieser Schritt wird optional, wenn der sich aus Berechnungsphase ergebende Hashwert die gewünschte Bitlänge besitzt. Wäre nicht der Fall, so soll eine Funktion
g auf diesen Hashwert angewendet werden. Diese wird eine Ausgabetransformation genannt. Der entgültige Hashwert ist damit h(m) = g(ht ).
3.2.2 Merkle-Damgård-Konstruktion
Eine konkrete Ausprägung der soeben vorgestellten iterativen Methode ist das MerkleDamgård-Desginprinzip, welches von Ivan Damgård [16] und Ralf Merkle[46, 45] im
Jahr 1998 unabhängig voneinander entdeckt wurde. Die Autoren haben jeweils eine
Methode zur Konstruktion von Hashfunktionen vorgeschlagen. Diese beiden Methoden sehen sehr ähnlich aus und basieren auf der Idee, aus einer kollisionsresistenten
Kompressionsfunktion eine kollisionsresistente Hashfunktion zu realisieren. Dies stellt
einen unschätzbaren Vorteil dar, weil das Problem der Suche nach sicheren Hashfunktionen auf der Suche nach sicheren Kompressionsfunktionen reduziert wird.
Die Merkle’s Methode, die sogenannte Metha-Methode, beschreibt die Konstruktion
und den Paddingsvorgang jeder Nachricht beliebiger Länge, während die Damgård’s
Methode zusätzlich einen Sicherheitsbeweis für die Konstruktion vorstellt.
Bei dem Merkle-Damgård-Desginprinzip wird eine Kompressionsfunktion verwendet,
die r Bits auf s Bit abbildet, mit r > s. Unter Annahme, dass diese Funktion kollisionsresistent ist, wird eine Hashfunktion realisiert, die jedes Bit-String beliebiger Länge auf
ein s-Bit-String abbildet, mit dem Ziel, dass diese Hashfunktion die Kollisionsresistenz
aufweist. Da dieses Desginprinzip sehr einfach und effizient ist, wird bei allen in der
Praxis eingesetzten Hashfunktionen angewendet. Die Merkle-Damgård-Konstruktion
ist wie folgt beschrieben.
21
Kapitel 3 Die Merkle-Damgård Konstruktion
Definition 3.1 (Merkle-Damgård Konstruktion)
Gegeben sei eine Kompressionsfunktion f : {0, 1}m → {0, 1}n , mit m > n. Jede
Nachricht m wird in Blöcke m1 , · · · , mk mit je (m − n) Bit aufgeteilt, nachdem ein
einziges Eins und genügend Nullen an die Nachricht anhängt wurden, damit die Länge
der Gesamtnachricht ein Vielfaches vom m − n wird. Der Letzte Block mk besteht aus
der binären Darstellung von der Länge der Originalnachricht. Bezeichnen wir mit h
die daraus entstehnde Hashfunktion. Diese wird dann wie folgt definiert:
h : {0, 1}∗ → {0, 1}n ,
wobei die Menge {0, 1}∗ aller Bit-Strings darstellt.
Sei h0 den Initialwert, mit h0 = 0n . Bezeichnen wir mit 0n das n-Bit Nullstring.
Die Hashwerterzeugung erfolgt durch einen iterativen Ablauf folgendermaßen:
h1 = f (0n ||m1 ),
hi = f (hi−1 ||mi ),
i = 2, 3, · · · , k.
Der endgültige Hashwert ist:
h(m) = hk .
Wie schon erwähnt, basiert die Sicherheit der MD-Konstruktion auf der Sicherheit der
verwendeten Kompressionsfunktion. Ist eine Kompressionsfunktion kollisionsresistent,
so muss auch die daraus enstehende Hashfunktion diese Eigenschaft besitzen. Diese
Behauptung wurde mathematisch zunächst von Damgård und Merkle [16, 46] und
dann später von von Xuejia Lai und James Massey [39] gezeigt.
Im Folgenden werden drei wichtigen Theorems vorgestellt, die den Zusammenhang
zwischen der Sicherheit einer Kompressionsfunktion und deren Hashfunktion erklären.
Theorem 3.1 (Merkle-Damgård-Paradigm)
Ist die in der Definition 3.1 vorgestellten Kompressionsfunktion f kollisionsresistent
und m − n ≥ 2, so ist die mit Merkle-Damgård-Methode konstruierte Hashfunktion
auch kollisionsresistent.
Beweis:
Mittels eines indirekten Beweis zeigen wir, dass die Kollisionsresistenz von f die Kollisionsresistenz von h impliziert.
Angenommen, dass ein Paar (m, m0 ) mit h(m) = h(m0 ) existiert.
Wir führen den Beweis per vollständige Induktion über die Anzahl der Blöcke k.
Seien m und m0 mit m 6= m0 . Dann sind zwei Fälle zu unterscheiden:
22
Kapitel 3 Die Merkle-Damgård Konstruktion
1. Falls m und m0 die gleiche Länge haben, d.h |m| = |m0 |.
• Induktionsanfang: Für k = 1 gilt:
h(m) = f (0n ||m1 )
= h(m0 ) ⇔ f (0n ||m1 ) = f (0n ||m01 ).
Wegen 0n ||m1 6= 0n ||m01 ist f nicht kollisionsresistent.
• Induktionsschritt:
• Induktionsvoraussetzung: Angenommen, dass die Eigenschaft bis Ordnung
k erfüllt ist.
• Induktionsschluss: Zeige, dass diese auch für k + 1 erfüllt ist.
Es gilt :
f (hi−1 ||mi ) = f (hi−1 ||m0i ), für alle 1 ≤ i ≤ k.
Daraus folgt:
m1 , · · · , mk = m01 , · · · , m0k .
Da m 6= m0 , dann muss gelten mk+1 6= m0k+1 .
Wegen h(m) = h(m0 ) folgt daraus:
f (hk+1 ||mk ) = f (hk+1 ||m0k ).
Dies steht im Widerspruch zur Voraussetzung, dass f kollisionsresistent ist, weil
(hk+1 ||mk ) 6= (hk+1 ||m0k ) gilt.
2. Falls |m| =
6 |m0 |. O.B.d.A. nehmen wir an, dass |m| < |m0 | ist.
Damit eine Kollision auftritt, soll es sich in der letzten Iteration der Kompressionsfunktion f denselben Hashwert ergeben.
Wegen |m| 6= |m0 | folgt daraus, dass die letzte Blöcke von m von m0 mit verschiedenen Anzahl der Padding-Bits aufgefüllt werden und somit unterscheidet
sich auch die jeweils letzten Blöcke, welche nur diese Anzahl darstellt.
Aus h(m) = h(m0 ) ergibt sich: f (hk+1 ||mk ) = f (hk+1 ||m0k ). Daraus folgt dass,
die Nachrichten hk+1 ||mk und hk+1 ||m0k eine Kollision für f bilden und somit ist
die Kompressionsfunktion nicht kollisionsresistent.
23
Kapitel 3 Die Merkle-Damgård Konstruktion
Ein ähnliches Ergebnis erzielte die Arbeit von Lai und Massey [39]. Die Autoren zeigten, wie die Sicherheit einer Kompressionsfunktion auf der Sicherheit der nach MDPrinzip gebauten Hashfunktion auswirkt. Dies wird im nachstehenden Theorem ohne
Beweis gegeben.
Theorem 3.2 (Lai-Massey)
Ist in der MD-Konstruktion ein Angriff auf die Kompressionsfunktion erfolgreich
durchführbar, so ist auch auf die daraus entstehende Hashfunktion.
Beweis: Siehe [39].
Aufbauend auf dem vorhergehenden Theorem wurde von Bart Preenel [56] ein anderes Theorem hergeleitet. Dabei wurde gezeigt, wie sich die 2nd -Preimage-ResistenzEigenschaft einer Kompressionsfunktion auf deren Hashfunktion und umgekehrt
übertragen lässt.
Theorem 3.3 (Lai-Massey-Preneel)
Angenommen, dass in jeder Nachricht, welche mindestens aus zwei Blöcke besteht,
ein MD-Strengthenning durchgeführt wird. Dann gilt: Das Finden eines zweiten Urbildes für die Hashfunktion h unter Verwendung eines festen Initialswertes IV mit dem
Aufwand 2n Hashberechnungen ist zum Finden eines zweiten Urbildes für Kompressionsfunktion f unter Verwendung eines willkürlich ausgewählten Zwischenhashwertes
hi−1 mit dem gleichen Aufwand äquivalent.
Beweis:
Im Folgenden wird o.B.d.A. angenommen, dass die Nachricht aus zwei Blöcke besteht.
⇒-Richtung: Seien m und m0 zwei Nachrichten mit h(m) = h(m0 ), wobei m0 ein zweites
Urbild darstellt.
Setze m = m1 ||m2 und m0 = m01 ||m02 . Dann ergeben sich die drei folgende Fälle:
{m1 = m01 } ∨ {m2 = m02 } ∨ {m1 = m01 ∧ m2 = m02 }.
Wegen h(m) = h(m0 ), folgt für diese Fälle daraus, dass das zweite Urblid für die Kompressionsfunktion in der letzten Iteration oder in einer Iteration mit einem bekannten
hi−1 gefunden wird.
⇐-Richtung: Um ein zweites Urblid für die Hashfunktion h zu finden,versucht man
ein zweites Urbildd für die Kompressionsfunktion zu produzieren. Dies wird erst nach
der Bearbeitung des ersten Nachrichtblock geschehen. Damit erhalten wir zwei Nachrichten m = m1 ||m2 und m0 = m01 ||m02 mit m2 6= m02 ,welche denselben Hashwert
erzeugen.
24
Kapitel 3 Die Merkle-Damgård Konstruktion
3.3 Schwächen vom MD-Konstruktion
Dank des Vorschlages von Merkle-Damgård wurde das Problem der Suche nach sicheren Hashfunktionen auf der Suche nach sicheren Kompressionsfunktionen eingeschränkt. Wenn die Kompressionsfunktion Anfälligkeiten gegen bestimmten Angriffe
aufweist, muss sie weiter nicht eingesetzt werden, auch wenn die Übertragung dieser
Angriffe auf die vollständige Hashfunktion nicht möglich ist.
Trotz vorteilhaften Auswirkungen des Paddingprozesses und des MD-StrengtheningAnsatzes, indem die Kollisionsresistenz der Hashfunktion verbessert wird, leiden fast
alle iterativ gebauten hashfunktionen an ernsthafter Schwäsche, die ausgenutzt werden
können, um möglicherweise eine Reihe von Angriffe durchzuführen.
Im Folgenden werden zwei Schwähen der MD-Konstruktion vorgestellt, die Length
Extension und Partial-message-collision-Eigenschaft [24]. Es wird jeweils zunächst die
Schwäche erläutert und danach erklärt, inwieweit ein Angriff der jeweiligen Schwäche
möglich ist und anschließend wird gezeigt, wie man diese umgehen kann.
3.3.1 Länge-Verlängerung (Length Extension)
Die Length-extension-Eigenschaft[24] ist einer der bekanntesten theoretischen Eigeschenschaft von fast allen nach MD-Prinzip gebauten Hashfunktionen. Diese hat gravierende Auswirkungen, wenn sie nicht beseitigt wird. Um zu erklären, was man
überhaupt unter eine Length-extension-Eigenschaft versteht, stellen wir das folgende Problem vor :
Sei eine Nachricht m, bestehend aus k Blöcken m1 , . . . , mk , mit dem Hashwert
H = h(m). Ausserdem wählen wir eine andere Nachricht m0 , bestehend aus k + 1
Blöcken, so dass die k ersten Blöcke mit der Nachricht m identisch sind. Somit gilt
m0 = m||mk+1 , wobei mk+1 ein zusätzlich an die Nachricht m gehängter Block ist. So
gilt die folgende Beziehung :
h(m0 ) = f (h(m), mk+1 )
Die Length-extension-Eigenschaft wird immer existieren , solange es keine spezielle
Verarbeitung am Ende der Hashfunktion geben würde. Die Konsequenz davon lautet,
dass der Hashwert h(m) eine nützliche Information über den Zwischenhashwert von
m0 nach den k ersten Blöcke der Nachricht m0 liefert. Jetzt stellt sich nur noch die
Frage, welche Auswirkung könnte überhaupt diese Eigenschaft auf eine Hashfunktion
haben ?. Dies werden wir nachfolgend erläutern.
25
Kapitel 3 Die Merkle-Damgård Konstruktion
Angenommen, wir haben eine Nachricht m, bestehend aus k − 1 Blöcken m1 , . . . , mk−1
mit Hashwert h(m). Kennt ein Angreifer den Hashwert und die Nachrichtlänge aber
nicht die Nachricht, so geht er wie folgt vor :
• Sind nur Nullen anstelle der binären Darstellung zu der Nachricht hinzugefügt,
erzeugt er zunächst einen Block mk und fügt dann ihn an die Nachricht. Weil es
bei meisten Hashfunktionen das MD-Strengthening benutzt wird, fügt er dazu
noch einen zweiten Block mk+1 , welcher aus der Binäredarstellung der Originalnachricht ensteht. Als nächstes betrachtet er eine neue Nachricht m0 = m||mk
und berechnet dann zwei Hashwerte folgendenmaßen:
h(m0 ) = h(h(m), mk+1 )
• Wüsste der Angreifer, dass im Voraus einen zusätlichen Block mk durch das MDStrengthening erzeugt wurde, so setzt er mk+1 = m||mk als neue Nachricht und
berechnet dann den Hashwert h(m, mk+1 ) und schickt ihn dem Emfänger. Wir
beachten hier, dass der Paddingvorgang zwei mal durchgeführt wurde, zunächst
durch MD-Stengthening und dann durch den Angreifer.
Da in beiden Fälle der Hashwert stimmt, kann der Emfänger diese Manipulation nicht
mehr entdecken.
3.3.2 Kollision bei Nachrichtenteilen (Partial-message-collision)
Das zweite Problem ist das sogenannte Partial-message-collision[24]. Wir erläutern
dieses an folgenden Beispiel: Gegeben sei ein Authentifikationssystem, mit dem sich
ein Benutzer mit der Nachricht h(m||x) bei einem Server authentifiziert, wobei jeweils
m die Benutzername und K der Authentifikationsschlüssel ist. Damit ein Angreifer
erfolgreich als legitimer Benutzer authentifiziert ist, findet er eine Nachricht m0 (z.B.
mit Geburtstagangriff), welche den Hashwert h(m) liefert, d.h h(m) = h(m0 ). Augrund
der iterativen Hashberechnung erfüllt jeder beliebige String K die folgende Gleichung:
h(m||K) = f (h(m)||K) = f (h(m0 )||K) = h(m0 ||K).
Auf diese Weise gelingt dem Angreifer, sich erfolgreich als legitimer Benutzer zu authentifizieren.
Zur Beseitigung dieser Schwachstellen haben Schneier und Fergusion haben [24] zwei
Lösungsmöglichkeiten [24] vorgestellt, welche Doppeltes Hashing (Double-Hashing) 1
Schemas gennant weden.
Die Idee besteht darin, dass ein zweimaliges Anwenden des Hashvorgangs auf eine
Nachricht alle Informationen über den internen Zustand der Hashfunktion zerstören
kann. Bei der ersten Möglichkeit wird zunächst den Hashwert h(m) der Nachricht m
1
Double Hashing wird in vielen literature als DHASH bezeichnet
26
Kapitel 3 Die Merkle-Damgård Konstruktion
berechnet und dann miteinander zusammenhängt und schliesslich darauf die Hashfunktion angewendet. Der endgültige Hashwert ist also h(h(m)||m) statt h(m), das
heisst die Hashfunktion
x → h(x) wird durch einfach x → h(h(x)||x) ersetzt.
Dieser Ansatz ist sehr zeitaufwendig, da man sowohl den Hashwert der Nachricht M
als auch das String h(m)||m berechnen muss. Zur Behebung des Problems steht eine
andere Lösung zu Verfügung. Anstelle der Hashfunktion x → h(x) verwendet man
x → h(h(x)), was aber den Nachteil hat, dass das Sicherheitsniveau der Hashfunktion
auf x → h(h(x)) reduziert wird. Aufgrund der hohen Wahrscheinlichkeit von Kollisionsangriffen, versucht man ein Kompromiss zwischen der Hashwertlänge und dem
gefordeten Sicherheitsniveau zu finden.
3.4 Angriffe auf die MD-Konstruktion
In der Kryptoanalyse von Hashfunktionen wurde stets versucht, effiziente Angriffe zu
entwickeln mit dem Ziel, die Kollisionsfestigkeit von der Kompressionfunktion und der
daraus enstehenden Hashfunktion zu verringern. Während der letzten Jahre wurden
im Allgemein nur Angriffe auf die meisten eingesetzten Hashfunktionen vorgestellt,
die nach MD-Prinzip gebaut sind. Aus diesem Grund wurde eine wichtige Frage von
Kryptoexperten gestellt, ob das MD-Prinzip überhaupt als geeignet zur Kontruktion
moderner Hashfunktionen gilt. Bevor wir uns mit einer Reihe von Angriffe auf die
MD-Konstruktion befassen, wollen wir zunächst den sogenannten Geburtstagsangriff
vorstellen, weil er für weiteren Angriffe nützlich ist.
3.4.1 Geburtstagsangriff
Der Geburtstagsangriff (Birthday Attack) ist ein generischer Angriff, der von dem sogenannten Geburtstagsparadoxproblem abgeleitet wurde, dem folgende Frage zugrunde
liegt: Wie viele Personen müssen in einem Raum sein, damit mindestens zwei Personen
mit einer Wahrscheinlichkeit grösser als 50 prozent am gleichen Tag Geburtstag haben?. Zwischen diesem Problem und Hashfunktionen besteht eine enge Beziehung und
zwar die Hashwerte können als Geburtstage aufgefasst werden und die zu haschende
Nachricht als Personen.
So lässt sich die Frage dahingehend umformulieren: Wie viele Nachrichten müssen
gehasht werden, damit man mindestens zwei Nachricht mit demselben Hashwert mit
einer Wahrscheinlichkeit grösser als 50 Prozent findet ?. Wird die Hashfunktion als
ein Blak-Box modelliert, indem keine Informationen über deren innere Struktur zur
27
Kapitel 3 Die Merkle-Damgård Konstruktion
Verfügung gestellt werden, so bestimmt dieser Angriff die benötigten Anfragen, die
von einem Angreifer an die Hashfunktion gesendet werden sollen, damit er mindestens
zwei Nachrichten mit demselben Hashwert mit einer signifikanten Wahrscheinlichekit
findet.
Der erste Geburtstagsangriff war vom Gideon Yuval[79] als eine Anwendung des Geburtstagsparadoxproblems in Hashfunktionen eingeführt. Dieser Angriff gibt die erwartete Anzahl der zu hashenden Nachrichten an, welche zu einem Preimage oder
einer Kollision führen. Bevor wir den Aufwand dieses Angriffs vorstellen, wollen wir
einige Begriffe geben.
Definition 3.2 (Kollision)
Eine Kollision für eine Hashfunktion h ist ein Paar von zwei verschiedenen Nachrichten m und m0 , die denselben Hashwert haben,d.h h(m) = h(m0 ).
Diese lässt sich nachfolgend verallgmeinern :
Definition 3.3 (k-Kollision)
Eine k-Kollision (auch k-Weg-Kollision) für eine Hashfunktion h sind k paarweise
verschiedene Bitsstrings m(1) , m(2) , . . . m(k) , die alle denselben Hashwert haben, d.h
h(m(1) ) = h(m(2) ) = . . . = h(m(k) ).
Ist k ≥ 3, so wird die k-Kollision als Multikollision bezeichnet.
Wir bezeichnen eine Hashfunktion h als k-kollisionsresistent, wenn sich eine k-Kollision
für h nicht berechnen lässt.
Definition 3.4 (Multiweg-Urbil (multi-way-preimage))
Ein k-Weg-Urbild für eine Hashfunktion sind k paarweise verschiedene Bitsstrings
m(1) , m(2) , . . . m(k) mit demselben vorgebebenen Hashwert. Für einen vorgegebenen
Hashwert h heisst das wie folgt:
h(m(i) ) = h(m(j) ) = h , ∀i 6= j mit i, j ∈ {1, 2, · · · , k}.
Ein Mutilweg-Urbil ist ein k-Weg-Urbild mit k ≥ 3.
Ist ein k-Weg-Urbild für eine Hashfunktion h nicht einfach zun finden,so ist h als
k-Weg-resistent bezeichnet.
Im folgendem wollen uns nun die Sicherheit einer Hashfunktion h gegenüber der Kollisionsresistenz und Preimage-Resistenz im sogenannten Zufallsorakelmodell (RandomOracle Modell) betrachten.
Definition 3.5 (Zufallsorakelmodell)
Ein Zufallsorakel (auch ideale Hashunktion gennant) stellt eine idealisierte Hashfunktion h dar, welche zufällig und gleichmäßig aus der Menge aller Hashfunktionen ausgewählt wird und deren Bescheibung überhaupt nicht bekannt ist und deren Ausgabe
28
Kapitel 3 Die Merkle-Damgård Konstruktion
h(x) für eine Eingabe x echt zufällig ist. Die einzige Möglichkeit h(x) zu bestimmen
ist das Orakel zu befragen.
Man kann ein Zufallsorakel also als ein Black-Box für die Hashfunktion h auffassen,
der die Hashfunktion auswertet.
Eine wichtiger weiterer Begriff zur Untersuchung der Effizienz von Algorithmen ist die
sogenannte die Ordnung (auch Notation). Unter Ordnung verteht man ist ein mathematisches Verfahren zur Einordnung der Komplexität von Funktionen in Abhängigkeit
von der Eingaben. Insgesamt gibt es drei Arten von Notationen, welche wir hier zusammenfasst geben wollen.
Definition 3.6 (Notation) Gegeben seien zwei positive f und g Funktionen.
1. O-Notation (big O-notation): Wir sagen f (n) ist O(g(n)) genau dann wenn
∃ C > 0 und eine eine natürliche Zahl N0 , so dass
f (n) ≤ C · g(n), ∀n ≥ N0 .
2. Ω-Notation (Ω-notation): Wir sagen f (n) ist Ω(g(n)) genau dann wenn
∃ C > 0 und eine eine natürliche Zahl N0 , so dass
f (n) ≥ C · g(n), ∀n ≥ N0 .
3. Θ-Notation (Θ-notation): Wir sagen f (n) ist Ω(g(n)) genau dann wenn
∃ C1 , C2 > 0 und eine eine natürliche Zahl N0 , so dass
C1 · g(n) ≤ f (n) ≤ C2 · g(n), ∀n ≥ N0 .
Unter der Bedingung, dass die Hashfunktion h ein Zufallsorakel darstellt, erhalten wir
die zwei folgenden Sätze, deren Beweise im Anhang A.2 gegeben sind.
Theorem 3.4 (Geburtstagangriff)
Ist die Hashfunktion durch ein Zufallsorakel modelliert, so beträgt die Anzahl der zu
haschenden Nachrichten mindestens 2n bzw. 2n/2 , um ein Urbild bzw eine Kollision zu
finden.
Beweis: Siehe A.2
Statt dessen hat MCkinney in [43] das Resultat verallgemeinert, indem er zeigte,
welcher Aufwand zum Finden einer k-Kollision erforderlich ist.
Theorem 3.5 (k-Kollision)
Ist die Hashfunktion durch ein Zufallsorakel modelliert, so beträgt die Anzahl der zu
hashenden Nachrichten mindestens 2n(k−1)/k , um eine k-Kollision zu finden.
Beweis: Siehe A.2
29
Kapitel 3 Die Merkle-Damgård Konstruktion
Der folgende Algorithmus beschreibt abstrakt die Vorgehensweise zum Finden einer
k-Kollision für eine Hashfuntion h : D → W im Zufallsorakelmodell, wobei die Bezeichnungen D für den Definitionsbereich bzw. W für den Wertebereich stehen.
Algorithm 1 Multi-Geburtstagsangriff
1. Eingabe: Eine ideale Hashfunktion h und die Fragenanzahl t.
2. Berechnungen:
2.1. Wähle m1 , . . . , mt aus D zufällig aus .
2.2. Für i = 1 bis t berechne hi = h(mi )
3. Ausgabe: Falls es k-elementige Untermenge A aus {m1 , . . . , mt } existiert,
dann gib sie aus, Sonst keine k-Kollision gefunden.
3.4.2 Multikollision-Angriff (Joux-Angriff)
Der Multikollisionen-Angriff ist ein Angriff auf iterativen Hashfunktion, welcher von
Antoine Joux [32] erfunden und während des Workshops CRYPTO 2004 vorgestellt
wurde. In seinem Paper bewies er, dass in iterierende Hashfunktionen Multikollisionen
nicht viel schwerer zu finden sind als einfache Kollisionen . Anders ausgedrückt: wenn
man Kollisionen für die Hashfunktion (bzw. die Kompressionsfunktion) finden kann,
dann ist es sogar leicht, Multikollisionen für h zu erzeugen. Der Aufwand zum Finden
k
k
einer 2k -Kollision beträgt lediglich k × 2n/2 statt 2n((2 −1)/2 ) mit dem Geburtstagangriff.
Für den Joux-Angriff wird zunächst ein Kollionsfinder wie beispielsweise Geburtstagangriff vorausgesetzt, welcher bei der Eingabe von f und einem Zwischenhashwert hi
zwei verschiedene Blöcke x und x0 der Länge n als Ausgabe zurückliefert, welche eine
Kollision für die Kompressionsfunktion f erzeugen, d.h f (hi , x) = f (hi , x0 ).
Theorem 3.6 (Multikollision (Joux 2004))
Sei h eine Hashfunktion, welche nach dem MD-Prinzip konstruiert ist, deren zugrundeliegende Kompressionsfunktion als f bezeichnet. Dann zum Finden einer 2k -Kollision
für h werden etwa k × 2n/2 der Hashfunktionsaufrufe h erwartet, wobei n für die Hashwertlänge steht.
Beweis:
Wir geben den folgenden Algorithmus, welcher eine 2k -Kollision für f findet. Zu diesem
Zweck ist einen Kollionsfinder CF : {0, 1}n × {0, 1}r → {0, 1}n gegeben.
Wie die Abbildung 3.2 verdeutlicht, besteht die Idee des Multikollision-Algorithmus
darin, dass man k erfolgreiche Aufrufe vom Kollsionsfinder wie folgt durchführt:
30
Kapitel 3 Die Merkle-Damgård Konstruktion
Algorithm 2 2k -Kollisionsfinder
1. Eingabe: f, h, k und einen Kollisionfinder CF
2. Berechnungen:
2.1. Wähle einen Initialwert h0 aus.
2.2. Für j = 1 bis k
(mj0 , mj1 ) ← CF (h0 )
h0 ← f (h0 , mj )
3. Ausgabe: 2k verschiedenen Nachrichten der Form m1i ||m2i || . . . ||mki mit i ∈ {0, 1}.
• f (h0 , m1 ) = f (m0 , m01 ) , m1 6= m01
• f (f (h0 , m1 ), m2 ) = f (f (h0 , m01 ), m02 ) , m2 6= m02
..
..
..
..
•
.
.
.
.
• f (f (· · · , mk−1 ), mk ) = f (f (· · · , m0k−1 ), m0k ), mk 6= m0k
Abbildung 3.2: Schematische Darstellung des Joux-Angriffs.
Mit anderen Worten wird einen Kollionsfinder für alle 1 ≤ i ≤ k ausgeführt, um
mj 6= m0j zu finden, die die Gleichung f (hi−1 , mi ) = f (hi−1 , m0j ) erfüllen.
Wir erhalten damit
{x1 || · · · ||xk : xi ∈ {mi , m0i } , 1 ≤ i ≤ k} .
31
Kapitel 3 Die Merkle-Damgård Konstruktion
Diese bildet alle mögliche k-Kollisionen. Die Komplesxität des Angriffs lautet somit
O(k ∗ 2n/2 ).
Aus Algorithmus folgt, dass wir die Nachrichten der Form m1i ||m2i || . . . ||mki mit
i ∈ {0, 1} erhalten, die denselben Hashwert für h liefern:
h(m1 ||m2 || · · · ||mk ) = h(m01 ||m2 || · · · ||mk )
= h(m1 ||m02 || · · · ||mk )
.
..
..
..
= ..
.
.
.
0
0
= h(m1 ||m2 || · · · ||mk )
= h(m01 ||m02 || · · · ||m0k ).
Wegen i ∈ {0, 1} gibt es insgesamt 2k Kombinationen.
Eine besonders erstaunliche Anwendung des Joux-Multikollisionsangriffs findet man
bei den sogenannten Kaskadierten Hashfunktionen. Solche Hashfunktionen wurden
von Preneel [55](S.45) vorgeschlagen und dazu eingesetzt, um die Kollisionsresistenz
zu erhöhen. Ihre Implementierung erfolgt, indem man zwei unabhängig verschiedene
Hashfunktionen h und h0 nebeneinander verknüpft.
Zur Erzeugung des endgültigen Hashwert konkateniert man die Hashwerte von h und
h0 der Hashwertlänge n bzw. n0 miteinander. Dabei werden auch zwei unterschiedlichen Initialswerte IV bzw.IV 0 verwendet. Sei g die von h und h0 erzeugte kaskadierte
Hashfunktion. Wir definieren die Hashfunktion g dann als
g(m) = h(m)||h0 (m).
In [32] hat Antoine Joux auch gezeigt, dass solche Konstruktion von Hashfunktion keine zusätzliche Sicherheit gegen den Multikollisionsangriff bieten. Daher wurde es festgestellt, dass Multikollisionen nicht wirklich schwieriger zu finden sind als
gewöhnliche Kollisionen. Zum Finden einer Kollision werden deutlich wenige Aufrufe
benötigt,sofern eine der beiden Hashfunktionen h oder h0 eine iterierte Hashfuntion
ist.
Theorem 3.7 (Kaskadierte Hashfunktion)
Seien h und h0 zwei unabhängige Hashfunktionen, welche Hashwerte der Länge n bzw.
n0 erzeugen. Falls h oder h0 nach MD-Prinzip kontruiert ist, dann beträgt der Aufwand
32
Kapitel 3 Die Merkle-Damgård Konstruktion
0
zum Finden einer Kollision für g etwa O(n0 ∗ 2n/2 + 2n /2 ) Hashfunktionsaufrufe.
Beweis:
0
Sei O.B.d.A n ≤ n0 und k = n2 . Nach Anwendung des vorausgehenden Theorem
benötigt man zum Finden einer 2k -Kollision für h etwa n0 ∗ 2n/2 Rechenoperationen.
Nach dem Prinzip des Geburtstagangriffs erzeugt eine der soeben 2k erhaltenen Kollisionen eine für h0 , d.h das Auffinden einer Kollision für g = h||h0 erfordet insgesamt
0
etwa n0 ∗ 2n/2 + 2n /2 Rechenoperationen.
Der soeben durchgeführten Beweis kann zusammengefasst durch den Algorithmus 3
dargestellt werden.
Algorithm 3 KaskadKollision(h, h0 , n, n0 )
1. Eingabe: Zwei Hashfunktionen h, h0 , deren Hashwertlänge n bzw. n0 beträgt.
2. Berechnungen:
2.1. Führe den Algorithmus 2 für h aus, um eine 2k -Kollision für h zu finden.
2.2. Aus der 2k gefundenen Kollisionen suche nach zwei Nachrichten m und m0 ,
welche eine Kollision für h0 erzeugen.
3. Ausgabe: Die Nachrichten m und m0 bilden eine Kollision für die kaskadierte
Hashfunktion g = h||h0 .
Bemerkung 2.1:
• Wenn die Hashfunktionen h und h0 als Zufallsorakeln modelliert sind, dann
n
n0
benötigt das Finden einer Kollision für g etwa 2( 2 + 2 ) .
• Aus Theorem 3.7 kann man festsetllen, dass die Aneinanderkettung zweier Hashfunktionen gleicher Hashwertlänge keine ausreichende Sicherheit für die daraus
enstehende Hashfunktion bringt.
Dank des Mutlikollionsangriffs[32] lassen sich Multiweg-Urbilder effizient und erfolgreich ermiltteln. Zum Finden eines 2k -Weg-Urbildes für einer n-Bit-Hashfunktion sind
lediglich 2n statt 2k × 2n Rechenoperationen erforderlich. Zunächst findet man eine 2k Kollision und sucht dann nach einem Urblid, um diese Kollisionen zu zwingen, einen
bestimmten Zielpunkt zu erreichen.
Theorem 3.8 (Multiweg-Urblid)
Seien h eine n-Bit-Hashfunktion, welche nach dem MD-Prinzip gebaut ist. Für das
33
Kapitel 3 Die Merkle-Damgård Konstruktion
Finden eines 2k -Weg-Urbildes mit dem vorgegebenen Hashwert T wird lediglich ein
Aufwand von 2n Berechnungen benötigt.
Beweis:
Zunächst wird nach einer 2k -Kollision für h gesucht, indem man das Theorems 3.6
anwendet. Dabei beträgt der Aufwand 2k × 2n Hashberechnungen.
Bezeichne mit Z der sich ergebende Zwishenhashwert nach der Bearbeitung jedes k ten Nachrichtenblocks aller 2k Kollisionen. Die nächste Aufgabe ist es, einen Block m0
zu finden, welcher die Beziehung f (Z, m0 ) = T genügt. Das Auffinden solches Urblid
benötigt 2n Aurufe der Hashfunktion. Da Z ein gemeinsamer Hashwert der 2k -Kollision
ist, folgt nach Anwendung der Kompressionsfunktion f auf der Konkatenierung von
Z mit dem Block m0 daraus, dass der vorgegebene Hashwert erzielt wird. Somit wenn
k vernachlässigbar gegenüber 2n (k << 2n ) ist, dann ist der Gesamtaufwand ungefähr
k × 2n + 2n = O(2n ).
3.4.3 Kelsey-Schneier 2nd -Preimage-Angriff
Im Grundsätzlichen gilt eine Hashfunktion als sicher in Bezuf auf der PreimageResistenz, wenn das Auffinden von Urbilder und zweiten Urbilder für eine n-BitHashfunktion mindestens 2n Hashfunktionsaufrufe verlangt. In diesem Abschnitt wird
es gezeigt, dass solchen Aufwand reduziert werden kann. Dies wurde von Kelsey und
Schneier in [35] festgestellt. Sie haben gezeigt, dass zum Finden eines Preimages lediglich etwa k × 2n/2+1 + 2n−k+1 Hashberechnungen erforderlich sind, wobei k für die
Anzahl der Nachrichtenblöcke steht. Für die MD-Konstrunktion ist dies eine Herausforderung, da im Allgemein lange Nachrichten verwendet werden.
Der Angriff, auf welcher wir in diesem Abschnitt eingehen wollen, basiert auf dem
Begriff der sogenannten expandierbarer Nachrichten (engl. expandable messages).
3.4.3.1 Die Erzeugung von expandierbaren Nachrichten
Eine expandierbare Nachricht für eine Hashfunktion ist eine Menge von Nachrichten
unterschiedlicher Länge, die denselben Hashwert für h erzeugen, bevor der Paddingsprozess durchgefürt wird. Formal heisst das:
Definition 3.7 (expandierbare Nachricht)
Eine (α, β)-expandierbare Nachricht,mit α < β,ist eine Menge von β − α + 1 Nachrichten mit je α, α + 1, · · · , β Blöcke und die denselben Hashwert haben.
Expandierbare Nachricht können durch die sogennanten Fixpunkte ermittelt werden.
34
Kapitel 3 Die Merkle-Damgård Konstruktion
Unter einem Fixpunkt für eine Kompressionsfunktion f versteht man ein Nachrichtpaar (x, y), welches die folgende Beziehung erfüllt :
f (x, y) = y,
wobei x und y als ein Nachrichtenblock bzw.als ein Zwischenhashwert aufzufassen sind.
Im Folgenden zeigen wir, wie Fixpunkte dazu verwendet werden können, eine expandierbare Nachricht zu ermitteln, welche aus zwei Nachrichten besteht, die einen einzigen Block ( 1-Block ) bzw.t Blöcke (t-Blöcke) enthalten. Beide Nachrichten starten
von einen beliebigem Wert hin und erzeugen denselben Hashwert. Das Ganze erfolgt
durch die Durchführung des Algorithmus 4, welcher in [35] beschrieben wurde.
Algorithm 4 FindeEineKollision(t, hin )
1. Eingabe: t > 0, ein Startwert hin ∈ {0, 1}n .
2. Berechnungen:
2.1. Wähle zufällig einen Nachricthenblock q aus.
2.2. Setze htmp = hin .
2.3. Für = 0 bis t − 2 berechne htmp = f (htmp , q).
2.4. Erstelle zwei Listen A und B der Länge jeweils 2n/2 mit Hilfe von 2n/2 zufällig
ausgewählten Blöcke mi :
2.4.1. A [i] = f (h0 , mi ) für i = 0, · · · , 2n/2 − 1, wobei h0 der Initialwert.
2.4.2. B [i] = f (htmp , mi ) für i = 0, · · · , 2n/2 − 1.
2.5. Finde i, j, mit A [i] = B [j].
3. Ausgabe: Gebe die kollidierende Nachrichten (mi ||q||q|| · · · ||mj ) und A [i] aus.
Der Aufwand dieses Algorithmus hängt nur von dem Soll-Nachrichtenblock t und der
Hashwertlänge n ab und beträgt O(t−1+2n/2+1 ) Aufrufe der Kompressionsfunktion f .
Basierend auf diesem Algorithmus können expandierbare Nachrichten ziemlich effizient gefunden werden. Zunächst findet man 2n/2 Fixpunkte f (hi , mi ) = hi sowie
Nachrichtenpaare (h0i , m0i ),welches die Gleichung h0i = f (h0 , m0i ) erfüllt, wobei h0 für
den Intialwert der Hashfunktion h steht. Es ist klar, dass dies ungefähr 2n/2 Berechnungen benötigt . Unter diesen Nachrichten und mit einer guten Wahrscheinlichkeit
kann man zwei Indizes α und β bekommen, so dass h0α = h0β gilt. Auf diese Weise
erhalten wir eine (1, k)-expandierbare Nachricht(ohne den Paddingsvorgang), welche
aus der Nachrichten m0α und mβ wie folgt erzeugt und mit hm0α , mβ i bezeichnet wird:
hm0α , mβ i = m0α , m0α ||mβ , m0α ||mβ ||mβ , · · ·
35
Kapitel 3 Die Merkle-Damgård Konstruktion
3.4.3.2 Das Finden eines zweiten Urbildes
Wir gehen davon aus, dass ein Urbild einer langen Nachricht mtarget = m0 ||m1 || · · · ||mk
existiert, welches keine Paddingsbits enthält. Das Auffinden eines zweiten Urblides
erfolgt dann mithilfe von expandierbaren Nachrichten und verläuft algorithmisch wie
folgt:
1. Berechne für mtarget die ersten k Zwischenhashwerte hi für i = 0, · · · k.
2. Finde eine (1, k)-expandierbare Nachricht < α, β > und bezeichne mit hg ihren
gemeinsamen Hashwert.
3. Für zufällig ausgewählten Blöcke Bi wird f (hg , Bi ) solange berechnet, bis ein
Block Br gefunden wird, welcher die Bedingung f (hg , Br ) = hs für ein 1 ≤ s ≤ k
genügt .
4. Setze dann m0 = α|| β||β|| · · · ||β ||Br ||ms ||ms+1 || · · · ||mk .
{z
}
|
k-2
0
5. Die Nachricht m ist ein zweites Urbild, bevor sie auf derselben Weise wie mtarget
aufgefüllt wurde.
Wie wir sehen, liegt der Gesamtaufwand dieses Algorithmus bei O(2n/2+1 + 2n−log2 (t) )
Berechnungen für die Kompressionsfunktion f , da zur Erzeugung einer expandierbaren Nachricht etwa O(2n/2+1 ) benötigt, während das Finden nach einer Verbindung
zwischen den Zwischenhashwerte O(2n /k) kostet. Das besondere Interessante am Ergebnis ist, die erstaunliche Effizienz dieses Angriffs für ausreichend gross gewählt k im
Vergleich zum Brute-Force-Angriff, welcher O(2n ) Rechenoperationen benötigt.
3.4.4 Herding-Angriff
Der Herding-Angriff ist eine besondere Variante von Preimage-Angriffen, mithilfe derer Kelsey und Kohno eine andere geringfügige Schwäche in [33] von MD-Konstruktion
zeigten. Dieser Angriff basiert auf der so genannten Chosen-Target-Forced-Prefix
Preimage-Resistenz Eigenschaft ( eng. Chosen-Target-Forced-Prefix Perimage resistence(CTFP), welche wie folgt definiert ist.
Definition 3.8 (CTFP-Perimage-Resistenz)
Eine Hashfunktion h heisst Chosen-Target-Forced-Prefix Preimage-resistent , wenn es
schwer ist, zu einem gegebenen Nachrichtenpräfix P sowie Hashwert T ein Nachrichtensuffix S zu finden, so dass der Hashwert der Aneinanderkettung von P mit S mit
dem Hashwert T übereinstimmt. D.h h(P ||S) = T.
Die Herausforderung für den Angreifer besteht also darin, das ihm bereitgestellte Nachrichtenpräfix P zu zwingen, einen vorher ausgewählten Hashwert zu erreichen, indem
36
Kapitel 3 Die Merkle-Damgård Konstruktion
er ein Nachrichtensuffix ermitteln muss. Der Ablauf dieses Angriffs erfolgt in drei
Schritten. Zunächst erstellt der Angreifer eine so genannte Diamantstruktur und findet danach ein Linking-Nachrichtenblock, welcher als eine Verbindungstelle zwischen
dem gegebenen Präfix und einem Element der Diamanstruktur dient, um den SollHashwert zu erzielen . Schliesslich erzeugt er das gesuchte Suffix. Im Folgenden wollen
wir erläutern, wie das ganze Vorgehen abläuft.
• Erstellung einer Diamantstruktur:
Bei dieser Struktur handelt sich um ein Binärbaum2 , dessen Knoten Hashwerte
sind und dessen Kanten die Nachrichtenblöcke charakterisieren. Die Konstruktion solcher Struktur möchten wir zunächst anhand eines Beispieles erläutern,
welcher in der Abbildung 3.3 graphisch dargestellt ist und dann später eine verallgemeinerte Version geben. In unserem Beispiel startet der Angreifer zuerst mit
acht verschiedenen Nachrichtenblöcke m1 , · · · , m8 , deren Hashwerte verschieden
sind und mit h1 , · · · , h8 bezeichnet sind. Danach versucht er vier kollidierenden Hashwerte davon herauszufinden, die als Kindknoten der nächsten Stufe des
Baumes dienen. Erneut wiederholt der Angreifer diesen Vorgang für die vier Hashwerte und schliesslich für die zwei restlichen. Die daraus entstehende Struktur
bildet dann die so genannte Diamantstruktur, welche insgesamt aus 15 Knoten
besteht.
Verallgemeinert generiert der Angreifer zunächst 2k verschiedenen Hashwerte
aus 2k und findet daraus kollidierenden Paare, die dann zu 2k−1 neuen Hashwerte führen. Das Vorgehen wird solange wiederholt, bis der Angreifer den
Target-Hashwert erreicht. Insgesamt ergeben sich 2k+1 − 2 wischenregebnisee als
Strukturknoten.
• Das Finden einer Linking-Nachricht:
Wird einmal die Diamanstruktur konstruiert , so soll der Angreifer eine LinkingNachricht Mlink finden, welche das vorliegende Präfix mit einem Knot der Diamantstruktur vebindet. Nehmen wir an, dass 2k Startwerte (Hashwerte) generiert
und die Hashfunktion einen Hashwert der Länge n produziert. Als nächtes ermittelt der Angreifer aus 2n−k Nachrichten eine Nachricht S 0 , welche denselben
Hashwert eines Knotes der Diamantstruktur hat.
• Erzeugung des Suffixes:
Um das gesuchte Nachrichtensuffix zu erzeugen, geht der Angreifer folgendermaßen vor. Beginnend mit einem beliebigen Startknot, versucht er entlang des Baumes Nachrichtenblöcke (Kanten) zu finden, deren Hashwerte zu Target-Hashwert
führen. Dadurch entsteht das Suffix, indem er die gefundene Blöcke miteinander
konkateniert.
2
Als Binärbaum bezeichnet man in der Graphentheorie eine spezielle Form eines Graphen. Genauer gesagt handelt es sich um einen gewurzelten Baum, bei dem jeder Knoten höchstens zwei
Kindknoten besitzt.
37
Kapitel 3 Die Merkle-Damgård Konstruktion
Abbildung 3.3: Die Erstellung einer Diamantstruktur.
Wie wir wissen, benötigt das Auffinden von Urbilder normalerweise mehr als 2n Rechenoperation. Basierend auf der Idee des Herding-Angriffs Kelsey und Kohno haben
in [33] gezeigt, dass ein Aufwand vom O(2n−k−1 + 2(n+k)/2+2 ) benötigt wird, wenn das
vorliegende Präfix aus k + 1 Blöcke besteht. Dies erfolgt durch die Erzeugung einer
Diamantstruktur in etwa O(2(n+k)/2+2 ) sowie das Finden einer Linking-Nachricht in
etwa O(2n−k−1 ) der Kompressionsfunktionsaufrufe.
Theorem 3.9 (Herding-Angriff)
Sei h eine n-Bit-Hashfunktion. Der Aufwand des Herding-Angriffs beträgt etwa
O(2n−k + 2(n+k)/2+2 ) Kompressionsfunktionsaufrufe, wobei das Suffix aus k + 1 Blöcke
besteht.
Beweis: Der Beweis erfolgt in zwei Schritten:
• Bei der Erstellung einer Diamantstruktur werden in einer Stufe 2k Hashwerte als
Startwerte auf 2k−1 Hashwerte in der nächsten abgebildet. Das geschieht , indem
der Angreifer zunächst etwa 2(n+k+1)/2 Nachrichtenblöcke aus jedem Hashwert
aus 2k Möglichkeiten erzeugt und versucht dann , wie schon erwähnt, die kollidierende Hashwerte daraus zu finden. Um den Gesamtaufwand zu berechnen,
stellen wir die folgende intuitive Überlegung an: Wenn man 2(n+k+1)/2 Nachrichtenblöcke auf 2k Kanten verteilt, bekommt man 2(n+k+1)/2−k Blöcke pro eine
38
Kapitel 3 Die Merkle-Damgård Konstruktion
Kante und die Wahrscheinlichkeit, dass zwei Kanten davon kollidieren, ist etwa
((2(n+k+1)/2−k )2 /2n ) = 2−k+1 .. Daraus ergibt sich, dass etwa (2 = 21−k × 2k )
Hashwerte mit irgendeinem Hashwert kollidieren werden. Der gesamte Aufwand
in diesem Schritt ist daher etwa O(2(n+k)/2+2 ) Kompressionsfunktionsaufrufe.
• Zum Finden einer Linking-Nachricht werden 2n Nachrichten generiert, damit
ein Nachrichtblock geliefert wird, welcher als ein Anknüpfungspunkt zu einem
bestimmten Hashwert dient. Da die Diamantstruktur insgesamt über 2k+1 − 2
Konten verfügt (2k davon sind Startwerte), folgt daraus, dass man im Durchschnitt 2n−k−1 Nachrichten erzeuegen soll.
Das ganze Angriffssznerio benötigt den Aufwand O(2n−k−1 + 2(n+k)/2+2 ) von Kompressionsfunktionsaufrufe.
Bemerkung 2.2:
• Die hier vorgestellte Methode zur Erstellung einer Diamanstruktur ist besonders
ineffizient, wenn das gesuchte Suffix eine grossere Länge besitzt. Für längere Suffix setzt man eine elegante Variante ein, welche auf der Idee der expandierbaren
Nachrichten basiert und in [33] zu finden ist.
• Will man wissen, wie die Suffixlänge auszuwählen ist, damit sich ein maximaler bzw.einen minimaler Aufand des Herding-Angriffs , so betrachtet man die
Aufwandfunktion und sucht nach ihrer Extremstellen.
Definiere die Aufwandfunktion A als
A(k) = 2n−k−1 + 2(n+k)/2+2
Um eine Extremstelle zu bestimmen, muss man die erste Ableitung dieser Funktion bilden und gleich null setzen.
A0 (k) = ln(2) × (2(n+k+2)/2 − 2n−k−1 )
A0 (k) = 0 ⇔ 2(n+k+2)/2 = 2n−k−1
⇔ (n + k + 2)/2 = n − k − 1
n−4
.
⇔ k=
3
39
Kapitel 3 Die Merkle-Damgård Konstruktion
Der Aufwand an dieser Stelle ist gleich
n−4
n−4
n−4
= 2(n+ 3 +2)/2 − 2n− 3 −1
A
3
= 3 × 2(2n+1)/3 .
Aus diesem Ergebnis folgt daraus, dass der Gesamtaufwand für ein Suffix mit
n+1
Blockanzahl um den Faktor 2n/3 geringer als der Standardaufwand 2n ist.
3
3.5 Alternative Konstruktionen
Wegen der entdeckten Schwachpunkte im MD-Design und den daraus entstehenden
Angriffe sind für die Verbesserung der MD-Konstruktion in letzter Zeit verschiedenen
Ideen eingebracht. Die meistens davon basieren darauf, den Entwurf des Eingangs
bzw. des Ausgangs sowie die Innenstruktur der Kompressionsfunktion durch Einfügung
zusätzlicher Funktionen oder gebräuchlicher Operationen zu modifizieren, mit dem
Ziel, ideale und sichere Konstruktionen mit guten Gütekriterien zu realisieren.
In nachstehenden Abschnitte wollen wir auf einige wichtige Verbesserungsvorschläge
eingehen sowie ihre Sicherheit untersuchen. Weitere Vorschläge zur Verstärkung sowie
zur Idealiseirung des MD-Designs sind beispielerweise Prefix-free Merkle-Damgård [31],
Enveloped Merkle-Damgard (EMD-Transform)[5] und das Framework für iterativen
Hashfunktionen HAIFA [9].
3.5.1 Luks’s Konstruktionen
3.5.1.1 Wide-Pipe-Hashfunktion
Um die Sicherheit der MD-Konstruktion perfekt zu machen, schlug Stefan Lucks in
[40, 41] die sogenannte Wide-Pipe-Hashfunktion (engl.Wide-Pipe-Hashing) vor. Seine Grundidee besteht darin, die Bitlänge der inneren Struktur der Hashfunktion bei
MD-Design zu erhöhen, um die Anfälligkeit der MD-Struktur gegen den Joux Multikollisionsangriff zu beseitigen. Bei diesem neuen Design werden zwei Kompressionsfunktionen eingesetezt. Eine davon erzeugt Zwischenergebnisse grösser Länge w, welche
durch die restliche Kompressionsfunktion auf eine Bitlänge n abgebildet wird, wobei
n viel kleiner als w sein muss.
Wir bezeichnen mit hW P diese Hashfunktion 3 sowie mit f und g die zugrunde liegende
3
Wide-Pipe-Hashfunktion wird mit WPHF abgekürzt.
40
Kapitel 3 Die Merkle-Damgård Konstruktion
Kompressionsfunktionen, welche wie folgt definiert sind:
f : {0, 1}w × {0, 1}n → {0, 1}w
und
g : {0, 1}w → {0, 1}n .
Zur Hasherzeugung wird zunächst die Nachricht in Blöcke mi mit je n Bit eingeteilt.
Dann wird die erste Kompressionsfunktion f verwendet, welche Zwischenergebnisse einer Bitlänge w produziert, die ausreichend grösser als die Blocklänge n sein soll. Sinn
und Zweck des Einssetzens solcher Kompressionsfunktion liegt darin, das Zustandkommen innerer Kollisionen auszuschliessen. Um zu dem engültigen Hashwert zu kommen,
wird das Endeergebnis hk der Funktion f wiederum auf eine weitere Kompressionsfunktion g angewendet, welche die w Bit auf n Bit abbildet. Der formale Ablauf der
Hashberechnung mit der WP-Hashfunktion ist in der Abblidung 3.4 dargestellt und
sieht damit folgendermaßen aus:
Unter Verwendung eines Startwertes h0 ∈ {0, 1}w wird den Hashwert einer Nachricht
m = m1 ||m2 || · · · ||mk iterativ wie folgt berechnet:
h1 = f (h0 , m1 )
hi = f (hi−1 , mi ) für i = 2, 3, · · · , k
hW P (m) = g (hk ) .
Abbildung 3.4: Die Wide-Pipe-Hashfunktion.
Im Folgenden wollen wir die Sicherheit der WPHF im Zufallsorakelmodell untersuchen
und stellen dazu Theoreme und Beweise vor, die im Wesentlichen aus den Arbeiten
[40, 41] entnommen wurden. Zunächst möchten wir uns mit der Multikollisionsresistenz
beschäftigen und danach mit Multiweg-Preimage-Resistenz.
Theorem 3.10 (Wide-Pipe-Multikollision)
Sind die Kompressionsfunktionen f und g Zufallsorakeln , so benötigt das Auffinden
k
k
einer 2k -Kollision für die WPHF etwa min{k × 2w/2 , 2n(2 −1)/2 } Anfragen.
41
Kapitel 3 Die Merkle-Damgård Konstruktion
Beweis:
Hier wird die folgende Fallunterscheidung vorgenommen, in welcher berücksichtigt
wird, für welche der beiden Kompressionsfunktionen f oder g eine 2k -Kollision gefunden ist.
• 2k -Kollision für f : die Kompressionsfunktion f erzeugt eine Ausgabe der Länge
w. Daraus fogt nach Theorem 3.6 (Multikollision), dass das Finden einer 2k Kollision für f etwa k × 2w/2 Anfragen an f verlangt.
• 2k -Kollision für g : Nach Anwendung des Theorems 3.5 ergibt sich, dass etwa
k
k
2n(2 −1)/2 Anfragen benötigt werden, um eine 2k -Kollision für g zu finden.
o
n
w/2 n(2k −1)/2k
.
Daher beträgt der Gesamtaufwand für die WPHF min k × 2 , 2
Auf ähnliche Weise ergibt sich der Aufwand zum Auffinden eines Multiweg-Urblides
für die WPHF, unter Annahme, dass die verwendeten Kompressionsfunktionen als
Zufallsorakeln modelliert sind. Der Beweis des folgenden Therorems findet sich in [41].
Theorem 3.11 (Wide-Pipe-Multiweg-Urblid)
Sind f und g unabhängig voneinander als Zufallsorakeln modelliert, so zum Finden
• eines Urblides werden O(2n ) Anfragen an die WPHF benötigt.
• eines k-Weg-Urbildes sind O(min 2w/2 ) Anfragen an WPHF erforderlich.
• eines k-Weg-zewites Urbildes werden O(min 2w/2 , k × 2n ) Anfragen an die
WPHF benötigt.
Beweis: Siehe [41].
Es ist offensichtlich, dass die Erhöhung der Bitlänge w eine zusätzliche Sicherheit der
Hashfunktion gegen die Multiweg-Urbild-Angriffe bringt. Allerdings wird eine Laufzeit
grösser als 2w benötigt, so kann der Angreifer trotzdem den Joux-Angriff laufen lassen
und Nutzen aus der iterativen Struktur ziehen. Deswegen kann eine solche Hashfunktion mit solchem inneren Zustand (mit Bitlänge w) nicht als eine ideale Hashfunktion
eingeschätzt werden.
3.5.1.2 Double-Pipe-Hashfunktion
Aus der Gefährdung der Sicherheit von Wipe-Pipe-Hashfunktion durch den JouxMultikollisionsangriff und und das daraus resultierende Verhalten der Wipe-PipeHashfunktion als ideale Hashfunktion, ist es notwendig, den Baustein von WPHF
42
Kapitel 3 Die Merkle-Damgård Konstruktion
mit einem höhen Sicherheitsniveau auszustatten. Wie in [41] betont wurde, wird dies
erreicht, indem man w ≥ 2n auswählt. In [41] wurde darauf hingewiesen, dass notwendig (aber nicht ausreichend) ist, w ≥ 2n auszuwählen. Dies erfordert jedoch den
Aufbau neuer Kompressionsfunktion der Form
{0, 1}w × {0, 1}t → {0, 1}w .
Stattdessen schlug Stefan Lucks die Double-Pipe-Konstruktion vor, welche als eine
ausgedehnte Kompressionsfunktion aufzufassen ist, unter Verwendung einer Kompressionsfunktion der Form f : {0, 1}n × {0, 1}n+t → {0, 1}n mit t ≥ n, welche die one
single narrow-pipe-Kompressionsfunktion [41] genannt ist.
Bei der Double-Pipe-Hashfunktion, welche in der Abbildung 3.5 dargestellet wird, werden zwei Zwischenhashwerte gleichzeitig in jeder Iteration berechnet. Dabei sollen die
zwei Ausgabewerte zunächst miteinenander verkettet und dann in der nächten Iteration verwendet werden. Für den Algorithmus werden drei verschiedenen Initialswerte
IV1 ,IV2 und IV3 aus {0, 1}n benutzt.
Bezeichnen wir mit hDP die Double-Pipe-Hashfunktion 4 .Also für eine Nachricht
m = m1 ||m2 || · · · ||mk
erfolgt die Hashberechnung durch
h01 = f (IV1 , IV2 ||m1 )
h001 = f (IV2 , IV1 ||m1 )
und für i = 2, 3, · · · , k
h0i = f h0i−1 , h00i−1 ||mi
h00i = f h00i−1 , h0i−1 ||mi
und der entgültige Hashwert von m mit DPHF lautet
hDP (m) = f IV3 , h0k ||h00k ||0t−n .
4
die DPHF ist die Abkürzung von Doube-Pipe-Hashfunktion
43
Kapitel 3 Die Merkle-Damgård Konstruktion
Abbildung 3.5: Die Double-Pipe-Hashfunktion.
Wie man sieht, ist die Double-Pipe-Hashfunktion einerseits nur eine Variante der
Wide-Pipe-Hashfunktion , bei welcher jeder Zwischenhashwert hi−1 ∈ {0, 1}w durch
das Paare (h0i−1 , h00i−1 ) ∈ {0, 1}n × {0, 1}n ersetzt wird. Das heisst(w = 2n. In jeder
Iteration hängen die halbe Zwischenwerte h0i und h00i im Wesentlich von der vorherigen
h0i−1 und h00i−1 ab. Das ist sehr wichtig für die Sicherheit der DPHF. Anderseits beachtet man, dass diese Konstruktion zu einer Kaskadierung zweier Hashfunktion ausarten
würde, welche durch den Joux-Angriff gefährdet ist.
Anhand der Parameteranzahl, welche die Double-Pipe-Kompressionsfunktion in jeder
Iteration übernimmt, werden wir im Folgenden zwei neuen Begriffe von Kollisionen
definieren, damit wir die Sicherheit der DPHF analysieren können.
Definition 3.9 (Strikte Kollision)
Eine strikte Kollision (eng. strict collision) ist ein Paare von 3-Tupeln (h0 , h00 , m) und
(g 0 , g 00 , n) mit
h0 6= h00 , g 0 6= g 00 , und m 6= n,
so dass gilt
f (h0 , h00 ||m) = f (g 0 , g 00 ||n) und f (h00 , h0 ||m) = f (g 00 , g 0 ||n).
Definition 3.10 (Querkollision)
Eine Querkollsion ist ein 3-Tupel (h0 , h00 , m) mit h0 6= h00 so dass gilt
f (h0 , h00 ||m) = f (h00 , h0 ||m).
Eine Double-Pipe-Hashfunktion hDP heisst strikt kollisionsfrei (auch strikt kollisionsresistent bzw querkollisionsfrei (auch querkollisionsresistent falls es schwierig ist ,
eine strikte Kollision bwz. eine Querkollision für hDP zu finden ist.
Für die beiden Kollisionen in einem Zufallsorakelmodell ergibt sich das folgende Theoreme, welche aus der Arbeit [41] entnommen wurden. Zu diesem Zweck nehemen wir
44
Kapitel 3 Die Merkle-Damgård Konstruktion
an, dass das Finden strikter Kollisionen, Querkollisionen bzw. einer K-Kollision mindestens einen Zeitaufwand TS , TX bzw.T (K) benötigt.
Theorem 3.12 (Double-Pipe-Strikte -und Querkollision)
Falls die Kompressionsfunktion f als Zufallsorakel modelliert ist , dann wird zum
Finden
1. strikter Kollisionen eine Laufzeitskomplexität von TS = Ω(2n ) benötigt.
2. Querkollisionen eine Laufzeitskomplexität von TX = Ω(2n ) benötigt.
Beweis:
0
00
0
00
1. Sei (gi−1
, gi−1
, mi−1 ) einen 3-Tupel mit gi−1
6= gi−1
. Wählen wir eine Paare
2n
0 00
(gi , gi ) aus {0, 1} mit der Eigenschaft
0
00
00
0
gi0 = (gi−1
, gi−1
||mi−1 ) und gi00 = (gi−1
, gi−1
||mi−1 ).
Dieses Paare ist zufällig gleichverteilt 2n-Bit-Hashwert und unabhängig von allen
Werte der Form f (·, ·||·).
Sendet der Angreifer q zufällig verschiedene 3-Tupeln an den Orakel, so ist die
Erfolgwahrscheinlichkeit gleich
P
1
2n
× 22n
= q(q+1)
0≤j≤q j/2
2
Wegen
q(q+1)
2
×
1
22n
2
= 12 . 2q2n +
q
22n
≥
q2
22n
∈ Ω(q 2 /22n )
Damit diese Wahrscheinlichkeit sehr hoch wird, ist es ausreichend q = 2n zu
nehmen. Das heisst, um eine strikte Kollision zu finden, werden TS = Ω(2n )
Anfragen an Orakel benötigt.
00
0
, mi ) ist Querkollision falls
, gi−1
2. jeder 3-Tupel (gi−1
00
0
6= gi−1
gi−1
und
0
00
00
0
f (gi−1
, gi−1
||mi ) = f (gi−1
, gi−1
||mi )
erfüllt ist.
0
00
Da jedes Paare (gi−1
, gi−1
) zufällig gleichverteilt in der Menge {0, 1}2n ist, folgt
daraus, dass die Wahrscheinlichkeit des Zustandkommens einer Querkollision
0
00
0
00
(gi−1
, gi−1
, mi ) ist 2n /22n = 2−n , wobei gi−1
6= gi−1
und daher erwartet man
n
TX = Ω(2 ) Anfragen um eine Querkollision zu bekommen.
45
Kapitel 3 Die Merkle-Damgård Konstruktion
Nun wollen wir auf die Multikollisionsresistenz eingehen. Dazu brauchen wir das folgende Lemma.
Lemma
Wählt der Angreifer selber die zwei Intitialwerte h00 und h000 mit h00 6= h000 aus, so gelten
die folgenden Aussagen:
1. Jede innere Kollision für hDP führen entweder auf eine strikte Kollision oder
auf eine Querkollision zurück.
2. Zum Auffinden einer k-Kollision benötigt den Angreifer eine Laufzeitskomplexität von Ω(min {TX , TS , T (k)}).
Beweis:
1. Wegen h00 6= h000 liefert das Zustandkommen einer nicht-strikten Kollision einen
3-Tupel (h0i−1 , h00i−1 , mi ) mit
h0i−1 = h00i−1 , i ≥ 2.
Also es existiert ein j ≤ i − 2, welche die folgende Beziehung genügt
h0j 6= h00j , h0j+1 = (h0j , h00j , mj+1 ) = (h00j , h0j , mj+1 ) = h00j+1 .
Dies besagt, dass (h0j , h00j , mj+1 ) eine Querkollision ist und daher ist bewiesen,
dass eine nicht-strikte Kollision zu der Existenz einer Querkollision führt.
2. Eine k-Kollision für hDP ensteht daraus, wenn entweder eine finale k-Kollision
5
oder eine inneren Kollision vorkommt.
Nach voausgehender Behauptung, reduziert sich jede innere Kollision entweder
auf eine strikte Kollision oder auf Querkollion. Dies benötigt einen Zeitaufwand
von Ω(min {TX , TS , T (k)}). Darüber hinaus beträgt der Aufwand zum Finden
einer finale k-Kollision Ω(T (k)). Am Schluss ensteht einen Gesamtaufwand von
Ω(min {TX , TS , T (k)}).
Nach Anwendung von Theorems 3.8 und dem vorausgehenden Lemma erhalten wir
das nachstehende Resultat
Theorem 3.13 (Double-Pipe-Multikollision)
Sei eine DP-Hashfunktion. Falls zugrundeliegende Kompressionsfunktion f als ein Zufallsorakel modelliert ist und dem Angreifer die Auswahl zweier verschiedenen Intitialwerte h00 und h000 zur Verfügung gestellt worden sind, zum Auffinden einer k-Kollision
für hDP sind Ω(2n(k−1)/k ) Berechnungen von f erforderlich.
5
Unter finale Kollision versteht man eine Kollision, welche in der letzten Iteration für die Kompressionsfunktion aufftrit.
46
Kapitel 3 Die Merkle-Damgård Konstruktion
Die Analyse der DP-Hashfunktion bezüglich der (2nd ) Preimage-Resistenz kann so
ähnlich wie bei der Wipe-Pipe-Hashfunktion durchgeführt werden. Dabei ergibt sich
das folgende Theorem
Theorem 3.14 (Double-Pipe-Multiweg-Urbild)
Betrachte eine DP-Hashfunktion hDP , deren zugrundeliegende Kompressionsfunktion f als ein Zufallsorakel modelliert ist. Für einen Angreifer, der selber einen h0
auswählen kann, wird eine Ω(2n ) zum Finden eines Multiweg- bzw. eines 2nd -MultiwegUrbildes verlangt.
Als Fazit können wir sagen, dass im Zufallsorakelmodell die DP-Hashfunktion asymptotisch genauso sicher wie die Wide-Pipe-Hashfunktion mit w = 2n ist.
3.5.2 3C und 3C-X Hashfunktionen
Auf der Konferenz ACISP 2006 schlug Praveen Gauravaram et al. [52] die
3C-Hashfunktion und ihre erweiterte Version 3C-X vor. Sie ist eine Modifikation sowie eine Verbesserungsvariante der MD-Konstruktion. Das Ziel des Vorschlages ist es,
eine neuen Designentwurf zu realisieren, welcher nicht von dem Design der meist eingesetzten Hashfunktionen wie MD5 und SHA1 abweicht und gegen die neu endeckten
Angriffsstrategieen [77, 8, 73] resistent ist.
Die Konstruktionsidee ist auf den Arbeiten [3],[4] von Bellare, Canetti und Krawczyk basiert. Ein großer Vorteil dieser Konstruktion ist die Tatsache, dass jedes
Software, dessen Struktur bereits eine MD-Konstruktion enthält, kann auch die 3CKonstrunktion einsetzen, ohne die vorliegende MD-Kompressionsfunktion zu modifizieren. Im Folgenden wird die einfachste Variante der 3C-Hashfunktion vorgestellt und
besprochen, welche sich nicht viel von der in [52] vorgestellten Version unterscheidet.
Die Benennung 3C (3 Compression) stammt grundsätztlich von der Tatsache, dass
die Bearbeitung einer beliebigen Nachricht nach drei Ausführungen der Kompressionsfunktion durchgeführt wird. Das geschieht, wie die Abbildung 3.6 verdeutlicht,
zuerst für den Nachrichtenblocks mi , danach für den aufgefüllten Block P AD(ui ) (MDstrengthening) und schließlich für die Zwischenhastwerte hi und hi+1 . Am Ende jeder
Iteration ergeben sich zwei Werte hi und zi−1 , die bei letzten Durchlauf des Verfahrens
kombiniert werden müssen, bevor den endgültigen Hashwert ausgegeben wird.
Der Verlauf der 3C-Hashberechnung kann wie folgt formal beschrieben werden. Für
eine Nachricht m, bestehende aus k Blöcke ,m1 , m2 || · · · , mk mit je s Bit definieren
wir den folgende Paddingvorgang
47
Kapitel 3 Die Merkle-Damgård Konstruktion
P ad(x) = x|| 0||0|| · · · 0
| {z }
s−|x|
dann wird den Hashwert folgendermassen berechnet:
h1 = f (h0 , m1 )
u0 = h1
hi = f (hi−1 , mi ) für i = 2, 3, · · · , k
ui−1 = f (ui−2 , P ad (hi )) für i = 2, 3, · · · , k
hk+1 = (hk , P ad (uk−1 ))
h (m) = hk+1
Abbildung 3.6: Die einfachste Variante der 3C-Hashfunktion.
Im Vergleich zu der 3C-Hashfunktion wird bei der erweiterten Version 3C-X eine XOROperation anstelle die Kompressionsfunktion f eingeführt. Dabei ist es das Ziel, die
Performance der 3C-Hashfunktion zu verbessern. Dies geschieht, indem das PaddingVerfahren der ui eliminiert wird, aber nicht in der letzten Iteration, bevor den Hashwert
ausgegeben wird. Nach Praveen Gauravaram et al. gilt diese Modifikation als die einfachste Konstruktion, die man durch die MD-Konstrunktion erhalten kann, ohne auf
mehr Forderungen in Bezug auf der Performance zu bestehen.
Analog zu der MD-Konstruktion (Abs. 3.2.2) wurde gezeigt, dass Kollisionsresistenz
der Kompressionsfunktion die Kollisionsresistenz der Hashfunktion impliziert. Dies
wird als bewiesenes Theorem in in [52] gegeben.
Was die Sicherheit angeht, werden die beide Konstruktionen in [52, 54] auf Anfälligkeit
gegen drei Sicherheitseigenschfaten getestet , zunächst gegen die sogenannte MultiBlock-Kollision ( Multi-Block-Collision -MBC) [77, 8, 73], dann gegen
48
Kapitel 3 Die Merkle-Damgård Konstruktion
Joux-Multikollision [32] und schliesslich gegen die 2nd -Preimage Kollision sowie die
Length-Extension (Abs. 3.3.1, S.25). Die Analyse kam zu dem Ergebnis, dass diese
beide Schemas nicht besser als das ursprüngliche MD-Design sind, sowohl bezüglich der
MBC-Resisentenz [77, 8, 73] als auch der Multikollisionsresistenz [32]. Im Gegensatz
dazu bieten aber die beide Konstruktionen, aufgrund einer dreimaligen Anwendung
der Kompressionsfunktion, eine beweisbare Sicherheit gegen die restlichen Angriffe .
Was die Performance betrifft, ist die 3C viel weniger aufwändig als die
MD-Konstruktion, vor allem wenn sie zum Hashen kurzer Nachrichten eingesetzt wird.
Um einen Block beispielsweise (bzw. zwei Blöcke) zu bearbeiten, ist der Zeitaufwand
doppelt zu gross (bzw. dreihalb mal so gross vielfach ) wie bei MD-Konstruktion.
3.5.3 Randomisiertes Hashing : RMX-Transform
Unter dem randomisierten Hashing [28] oder auch RMX-Transform versteht man ein
Hashverfahren, in dem die zu haschende Nachricht randomiesert wird. Vereinfacht gesagt: die Nachricht wird ein zufälliger Charakter verliehen. Das dahinter stehende Ziel
ist die Erhöhung der Sicherheit der iterativen Hashfunktionen im Rahmen der digitalen Signatur gegen die Kollisionsangriffe, ohne die Änderung der Strukturen sowie
der Implementierung der Hash-und Signarture-Algorithmen vorzunehmen. Der Randomisierungsvorgang einer Nachricht wird durch zufälligen Parametern (random seeds)
gesteuert, indem jeden Nachrichtenblock mit einem zufällig generierten Strings durch
XOR-Operation veknüpft, selbst wenn die Hashfunktion nicht randomisiert wird.
Sei eine Nachricht m, welche in Blöcke der Bitlänge L eingeteilt ist und keine PaddingBits beinhält
m = m1 |m2 || · · · ||mk .
Der Verlauf der Hashberechnung erfolgt in zwei Schritten und sieht algorithmisch
folgendermassen aus :
1. Erzeugung von zwei Zufallszahlen r1 und r2
a) Generiere eine L-Bit Zuffalszahl r1
b) Falls |mk | kleiner als L, dann schneide die (|mk |) niedrigsten Bits von r1 ab
und setze sie als r2 ein.
2. Hashwertberechnung
a) h1 = f (h0 , r1 ), wobei h0 der Initialwert ist
b) hi = f (hi−1 , mi−1 ⊕ r1 ) für i = 2, 3, · · · , k − 1.
c) hk = f (hk−1 , mk ⊕ r2 )
49
Kapitel 3 Die Merkle-Damgård Konstruktion
d) Setze h (m) = hk als den endgültige Hashwert.
Ausführlich beschrieben wird bei dem randomisierten Hashalgorithmus zunächst die
RMX-Transform-Funktion gebildet. Zu diesem Zweck werden zwei Zahlen r1 und r2
generiert, welche die Länge L beziehungsweise |mk | haben, mithilfe deren eine neue
Zufallszahl r konstruiert wird, indem zunächst die Zahl r1 (k − 1)-mal mit sich selbst
konkateniert und dann mit der Zahl r2 verknüpft. Formal heisst das:
r = r1 ||r1 || · · · ||r1 ||r2 .
{z
}
|
k−1
Der nächste Schritt besteht darin, dass die Zufallszahl r zuerst einmal mit der Nachricht m blockenweise durch die XOR-Operation verknüpft werden soll. Diese Vorgehensweise bildet die sogennante die RMX-Transform-Funktion, welche mathematisch
wie folgt definiert ist:
RM X(r1, m1 |m2 || · · · ||mk ) = r1 ||r1 ⊕ m1 ||r1 ⊕ m2 || · · · ||r1 ⊕ mk−1 ||r2 ⊕ mk
Auf das daraus entstehende Ergebnis wird die Kompressionsfunktion angewendet, um
es iterativ und blockenweise zu bearbeiten. Wollen wir das soeben vorgestellte randomisierte Hashing durch eine Funktion hr1 charakterisieren, so können wir diese formal
auf folgende Weise definieren:
hr1 (m) = h(r1 ||r1 ⊕ m1 ||r1 ⊕ m2 || · · · ||r1 ⊕ mk−1 ||r2 ⊕ mk )
,wobei h für die aus f erzeugte Hashfunktion steht.
Der wichtigste Vorteil von Anwendung solcher Transformation (RMX) ist, dass die
resultierende digitalen Signature unabhängig von der off-line-Kollisionsresistenz der
verwendeteten Hashfunktion ist. Das bedeutet, dass die Sicherheit der digitalen Signature garantiert wird, selbst wenn off-line Kollisionen der Hashfunktion vorliegen.
Dies wird gewährleistet, indem die Zahl r1 vor Unbefügten geheim gehalten wird, welche zum Verifizieren des Hashwerts der Nachtricht erforderlich ist.
Eine besondere Eigenschaft bei einer RMX-Tranform-Hashfunktion hr , wobei r eine Zufallszahl, 6 ist die sogennante Enhancend Target Collision Resistance (eTCR),
welche eine Erweiterung der Target-Kollisionsresistanz -Eigenschaft (Target Collision
6
In der Kryptologie nennt solche Zufallszahl auch ein Salt-Wert. Darunter versteht (engl. für Salz)
eine Reihe von (typischerweise mindestens 12) zufälligen Bits, die als Teil der Eingabe einer SaltedHash-Funktion benutzt werden. Durch die Verwendung eines Salz-Wertes ist ein unverschlüsselter
Wert nicht mehr eindeutig einem verschlüsselten Wert zuzuordnen.
50
Kapitel 3 Die Merkle-Damgård Konstruktion
Resistance (TCR))ist. Die TCR-Hashfunktion wurden am Anfang in [50] als universelle Einweghashfunktionen (Universal one-way hash functions in bekannt und dann
später von Bellare und Rogaway in [7] umbenannt und eingeführt.
Definition 3.11 (Target-Kollisionsresistenz)
Sei S eine Indexmenge. Eine Familie von Hashfunktionen (hs )s∈S heisst
Target-Kollisionsresistent, wenn es einen effizienten Angreifer A gibt, der das folgende
Spiel mit einer vernachlässigbaren Wahrscheinlichkeit gewinnt :
1. A wählt eine Nachricht m
2. A bekommt eine zufällig ausgewählte s ∈ S
3. A muss eine Nachricht m0 6= m finden, so dass hs (m) = hs (m0 ) erfüllt ist.
Liegt eine TCR-Hashfunktion vor, so kann eine sichere digitale Signature einer Nachricht m auf folgende Weise erstellt werden. Zunächst generiert der Signer einen zufälligen
Salt-Wert r und berechnet dann den Hashwert hr (m). Anschließend unterzeichnet er
sowohl die Zahl r als auch die Nachricht (r||hr (m)) unter Verwendung eines bestimmten Signatureverfahren SIGN . Das Paare (SIGN (r), SIGN ((r||hr (m)))) stellt die
digitale Signatur der Nachricht m dar. Diese Verfahrensweise ist manchmal vergebens,
wenn sie beispielerweise mit dem RSA-Signatureverfahren verwendet wird, da das Signieren von r zur Änderung der Datenverschlüsselung wie PKCS#1 führt.
Um das Problem zu vermeiden, wurden die Enhancend Target-Kollisionsresistent Hashfunktionen eingeführt (eTCR), welche die Sicherheit der darauf basierenden Signature
gewährleistet, wenn lediglich den Hashwert hr (m) ohne r signiert wird.
Definition 3.12 (Enhancend Target-Kollisionsresistenz)
Sei S eine Indexmenge . Eine Familie von Hashfunktionen (hs )s∈S heisst Enhancend
Target-Kollisionsresistent wenn es einen effizienten Angreifer A gibt, der das folgende
Spiel mit einer vernachlässigbaren Wahrscheinlichkeit gewinnt :
1. A wählt eine Nachricht m aus
2. A bekommt eine zufällig ausgewählte s ∈ S
3. A muss eine Nachricht m0 und eine s0 ∈ S mit (s, m) 6= (s0 , m0 ) finden, so dass
hs (m) = hs0 (m0 )
In [28] gezeigt, ist die Hashfunktion h 2nd -Preimage-resistent, so ist das daraus resultirende RMX-Transfom eTCR-Kollisionsresistent. Den Beweis dafür findet man in [28].
Bemerkung 2.3:
51
Kapitel 3 Die Merkle-Damgård Konstruktion
In [65] wurde eine ähnliche Konstruktion vorgeschlagen. Die Grundidee besteht darin,
anhand von einer TCR-Kompressionsfunktion eine TCR-Hashfunktion zu implementieren.Diese Konstruktion sieht wie folgt aus:
Zunächst wird eine Nachricht m in k Blöcke mit je t Bit zerlegt, dann wird eine
dlog(k)e-elementige Menge B definiert
B = b1 , b2 , · · · , bdlog(k)e
Darüber hinaus wird einen Salt-Wert der Länge t zufällig ausgewählt. Mit Hilfe einer
Kompressionsfunktion f wird den Hashwert folgendermassen erzeugt:
• Für i = 1, 2, · · · , k
– Wähle zufällig ein Element bji aus B
– Berechne hi = f (hi−1 ⊕ bji , mi ⊕ r),
wobei man für h0 wieder einen Intialwert vorgeben muss.
3.6 Konkrete Beispiele
3.6.1 MD-Hashfunktionen
Die derzeit weltweit am häufig implementierten Hashfunktionen gehören zu MD4Familie. Sie basieren alle auf dem Merkle-Damgård Designprinzip, welches in Abschnitt
3.2.2 beschrieben wurde. Ihre Kompressionsfunktionen entsprechen einem Ad-HocDesign, das nicht auf andere Bausteine der Kryptpgraphie wie Blockchiffren baut.
Diese Familie enthält eine Menge von Hashfunktionen, welche im Folgenden genauer
beschrieben werden. Diese Beschreibung orientiert sich an Standards ISO/IEC 101183 und FIPS 180-2. Bei Darstellung solcher Hashfunktionen werden wir die folgende
Bezeichnungen und Defintionen verwenden:
Ausdruck
word
x+y
x⊕y
x∧y
¬x
x << s
x >> s
x||y
Bedeutung
Ein Bit-string, welche aus 32 Bits besteht
Addition modulo 232 oder 264 (abhängig von der Hashfunktion)
Bitweises ODER von x und y
Bitweises exklusives Oder von x und y
Negation bzw. das bitweise Komplement von x
Die Linke Shift-Operation von x um s Positionen
Die rechte Shift-Operation von x um s Positionen
Aneinanderkettung von x und y
52
Kapitel 3 Die Merkle-Damgård Konstruktion
MD4
1. Beschreibung
Die MD4-Hashfunktion [58] (eng. Message Digest 4) dokumentiert in RFC 1320,
wurde 1990 von Ronald L. Rivest veröffentlicht. Sie ist darauf ausgelegt, auf 32
bit Rechnern möglichst effektiv zu laufen. MD4 arbeitet mit 512 Bit Blöcken,
die wie folgt erzeugt werden:
1. Schritt (Padding-Bits)
Die Länge der Nachricht wird zunächst mit 1 bis 512 Bits so erweitert, dass sie
zu 448 modulo 29 kongruent ist. Das heisst, die Nachricht besitzt eine Länge,
welche vielfach von 512 minus 64 (448) ist. Die Füllbits, die zu Erweiterung verwendet werden, sind wie folgt angehängt: Das erste Bit ist “1” gefolgt von Nullen.
2. Schritt (Längenpadding)
Ein 64-Bit-String mit führenden Nullen wird angehängt, welcher die binäre Darstellung der Nachricht vor dem Padding enthält.
3. Schritt (Initialisierung des MD-Speichers)
Es wird ein 4 32-Wort-Puffer (A, B, C, D), welche wie folgt mit hexadezimalen
Werten initialisiert sind:
word A : 01 23 45 67
word B : 89 ab cd ef
word C : f e dc ba 98
word D : 76 54 32 10
4. Schritt (Verarbeitung der Nachricht)
Die Nachricht wird in Blöcke mit je 512 Bit eingeteilt, die mit dem Speicher
verknüpft und nacheinander mithilfe von folgenden Grundfunktionen in drei
Runden verarbeitet sind, wobei die vier Teile des Speichers 16 Mal permutiert
werden.
f (x, y, z) = (x ∧ y) ∨ (¬(x)z)
g (x, y, z) = (x ∧ y) ∨ (x ∧ z) ∨ (y ∧ z)
h (x, y, z) = x ⊕ y ⊕ z
Bezeichne mit m = m1 ||m2 || · · · ||mt eine Nachricht der Bitlänge L = 512.t.
Sei mi einen Block, welcher in 16 Wörter (words) zerlegt wird. Das heisst
mi = mi [0] || · · · ||mi [15]
53
Kapitel 3 Die Merkle-Damgård Konstruktion
Der erste Block m1 wird dann in drei Runden wie folgt verarbeitet:
• Erste Runde: In dieser Runde wird mit [abcd r
s] die Operation
a = (a + f (b, c, d) + m1 [r]) << s
bezeichnet. Dann werden die folgende 16 Operationen nacheinander verrichtet
[ABCD 0 3] , [DABC 1 7] , [CDAB 2 11] , [BCDA 3 19]
[ABCD 4 3] , [DABC 5 7] , [CDAB 6 11] , [BCDA 7 19]
[ABCD 8 3] , [DABC 9 7] , [CDAB 10 11] , [BCDA 11 19]
[ABCD 12 3] , [DABC 13 7] , [CDAB 14 11] , [BCDA 15 19]
• Zweite Runde: In dieser Runde wird eine andere Operation ausgeführt,die
wieder mit [abcd r s] bezeichnet und wie folgt definiert ist:
a = (a + g(b, c, d) + m1 [r] + K1 ) << s
,wobei das Wort K1 = 5A827999 eine Konstante im Hexadezimal-System
dargestellt wird. Wir führen dann die folgende Operationen
[ABCD 0 3] , [DABC 4 5] , [CDAB 8 9] , [BCDA 12 13]
[ABCD 1 3] , [DABC 5 5] , [CDAB 9 9] , [BCDA 13 13]
[ABCD 2 3] , [DABC 6 5] , [CDAB 10 9] , [BCDA 14 13]
[ABCD 3 3] , [DABC 7 5] , [CDAB 11 9] , [BCDA 15 13]
aus.
• Dritte Runde: Wir bezeichen mit [abcd k
s] die folgende Operation
a = (a + h(b, c, d) + m1 [r] + K2 ) << s,
wobei K2 = 6ED9EBA1 eine Konstante in Hexadezimal-System. Dann
werden die nachstehende Operationen ausgeführt:
[ABCD 0 3] , [DABC 8 9] , [CDAB 4 11] , [BCDA 12 15]
[ABCD 2 3] , [DABC 10 9] , [CDAB 6 11] , [BCDA 14 15]
[ABCD 1 3] , [DABC 9 9] , [CDAB 5 11] , [BCDA 13 15]
[ABCD 3 3] , [DABC 11 9] , [CDAB 7 11] , [BCDA 15 15] .
54
Kapitel 3 Die Merkle-Damgård Konstruktion
Um den zweiten Block m2 zu verabeiten, werden zunächst die vier SpeicherWerte (A, B, C, D) mit den folgenden Werten überschrieben
A = A + AA
B = B + BB
C = C + CC
D = D + DD
und danach startet man mit der ersten Runde, und so weiter, werden alle restlichen Blöcke bearbeitet.
4. Schritt (Hashwertaugabe)
Der ausgegebene Hashwert ist die Konkatenierung der letzten 32-Bit Wörter
(128 Bit) im Speicher (A, B, C, D):
M D4(m) = A||B||C||D.
Es wurde eine erweiterte Version vorgeschlagen, welche Extended-MD4 genannt
wurde. Diese Version erzeugt einen Hashwert der Länge 256 bit und und besitzt eine Kompressionsfunktion, deren Struktur aus zwei parallel geschalteten
Strängen der MD4-Kompressionsfunktion besteht, das heisst 6 Runden.
2. Sicherheit
Im Jahr 1991 untersuchten Boer und Bosselaers und Merkle [18] die MD4Hashfunktion und fanden Kollision für die Kompressionsfunktion. Fünf Jahre
später beschrieb Hans Dobbertin [19] eine effiziente Methode, wie Kollisionen
für die MD4 mit Hilfe eines einfachen Computer (kein Superrechner) in weniger
als einer Minute gefunden werden können. Acht Jahr später und in Cryto 2004
stellte ein chinesisches Wissenschaftlerteam einen Angriff [71] vor, der sich teilweise von Hand durchführen lässt . Dieser Angriff kann eine Kollision mit einer
Wahrscheinlichkeit zwischen 1/26 und 1/28 und lediglich mit einer Komplexität
von 28 Hashberechnungen und daher galt MD4 als gebrochen und sollte nicht
mehr eingesetzt werden.
MD5
Im April 1992 stellte Rivest mit dem RFC 1321 MD5 [59], eine verstärkte Variante
von MD4 (auch 128 bit Hashwert ) vor, an welcher Veränderungen lediglich im Verarbeitungsschritt vorgenommen wurden. Die wesentlichen Unterschiede zwichen MD4
und MD5 sind:
55
Kapitel 3 Die Merkle-Damgård Konstruktion
1. MD5 hat eine vierte Runde, in welcher eine eine neue Funktionen l verwendet
wurde.
l (x, y, z) = y ⊕ (x ⊕ ¬z)
2. In der zweiten Runde wurde die Funktion g durch die Funktion
g (x, y, z) = (x ∧ z) ∨ (y ∧ ¬z)
ersetzt.
3. Statt zwei (In Runde 2 und 3) wurden 64 Konstanten (16 Konstanten pro Runde)
in MD5 vewendet, basierend auf dem ganzahligen Teil von 232 |sin(j)|, wobei
1 ≤ j ≤ 64. Das heisst die ersten 32Bit der Binäredarstellung von |sin(j)|,
1 ≤ j ≤ 64.
4. Übernahme des Ergebnis der vorhergehenden Operation in jeden der insgesamt
64 Operationen.
Obwohl die MD5-Hashfunktion am meisten bekannte war und als sicher angesehen
wurde, ist sie ebenfalls gebrochen. In [71] (2004) bzw. in [72] (2005) wurde gezeigt,
wie sich eine Kollision für MD5-Hashfunktion finden lässt.
3.6.2 SHA-Hashfunktionen
Die SHA (eng.Secure Hash Algorithm) bezeichnet eine Gruppe standardisierter Hashfunktionen. Die erste 160-Bit-Version von SHA (bezeichnet SHA-0 auch SHS (Secure Hash Standard)) wurde von den US-Bundesbehörden NIST (National Institute
of Standards and Technology) und NSA (National Security Agency) entwickelt und
als NIST-Standard FIPS 180 im Jahr 1993 vorgeschalgen. Gleichzeitig war sie als Bestandteil des Digital Signature Algorithms (DSA) für den Digital Signature Standard
(DSS) gedacht.
SHA-0 ist im Wesentlichen eine andere Weiterentwicklung von MD4. Wegen Designfehlers wurde sie im Jahr 1995 korrigiert, als SHA-1 bezeichnet und in FIPS PUB 180-1
spezifiziert. 2002 wurden in FIPS PUB 180-2 drei weitere Versionen veröffentlicht:
SHA-256, SHA-384 und SHA-512. 2004 wurde die Variante SHA-224 veröffentlicht .
Diese Reihe von Hashfunktionen erzeugt eine grössere Hashwertlänge zwischen 224 bit
(SHA-224) und 512 bit (SHA-512) und ist als SHA-2 bezeichnet und besitzt unterschiedlichen Eigenschaften, die in der nachstehenden Tabelle zusammengefasst sind.
1. Beschreibung
Zunächst wird die Blockeinteilung für die zu verabeitende Nachricht durchgeführt. Wie die Tabelle 3.1 zeigt, ist die Blockgrösse unterschiedlich. Bei SHA-1,
56
Kapitel 3 Die Merkle-Damgård Konstruktion
Hashfunktion
Hashlänge
Blockgrösse
Bitlänge eines Wortes
Anzahl der Grundfunktionen
Anzahl der Initialwerten
Schrittanzahl pro Block
Anzahl der Konstanten
Maximale Nachrichtengrösse
SHA-1 SHA-224 SHA-256 SHA-384 SHA-512
160
224
256
384
512
512
512
512
1024
1024
32
32
64
64
64
3
6
6
6
6
5
8
8
8
8
80
64
64
80
80
4
64
64
80
80
64
64
64
128
128
2 −1 2 −1
2 −1
2 −1
2 −1
Tabelle 3.1: Die Eigenschaften der SHA-2 Familie.
SHA-224 und SHA-256 beträgt sie 512 Bit und bei SHA-384 und SHA-512 1024
Bit. Im Vergleich zu MD4 benutzt die SHA-Familie die Big-Endian-Architektur,
bei der das Byte mit höchstwertigen Bits (d.h. die signifikantesten Stellen) zuerst
gespeichert. Wenn das umgekehrt ist, dann handelt es sich um die Little-EndianArchitektur. Das war genau der Fall bei MD4.
1. Schritt (Padding-Bits)
Die Länge der Nachricht wird so erweitert, dass sie ein Vielfaches von 512 bzw.
1024 Bit minus 64 bzw. 128 Bit wird. Das erste Füllbit ist “1” gefolgt von vielen
Nullen.
2. Schritt (Längenpadding)
Eine 64 bzw. 128 Bit-String mit führenden Nullen wird nach dem Big-EndianPrinzip angehängt, welcher die binäre Darstellung der Nachricht vor dem Padding enthält.
3. Schritt (Initialisierung des SHA-Speichers)
Je nach Typ der verwendeten Hashfunktion wird der SHA-Speicher mit einer
bestimmten Anzahl der Werten initialisiert. Bei SHA-1 bzw.SHA-224, SHA-256,
SHA-384 und SHA-512 werden 5 bzw. 8 Intialisierungswerten verwendet. Beispielsweise bei SHA-1 wird ein 5 -Wörter-Speicher (A, B, C, D, E) benutzt, wel(0)
(1)
(2)
(3)
(4)
cher mit folgenden Werten (bezeichnet mit H0 , H0 , H0 , H0 , H0 ) intialisiert
wird:
(0)
H0
(1)
H0
(3)
H0
(4)
H0
= 67452301
= ef cdab89
= 98badcf e
= 10325476
57
Kapitel 3 Die Merkle-Damgård Konstruktion
4. Schritt (Verarbeitung der Nachricht)
Wie bei MD4 hängt die Kompressionsfunktion jeder SHA-2-Hashfunktion
grundsätzlich von der Anzahl der darin bestehenden Grundfunktionen und Konstanten ab (siehe Tablle 3.1). Im folgenden werden wir uns nur auf Berechnungsphase der SHA-1 beschränken. Für die restlichen Hashfunktionen kann die
originale Quelle [51] nachgeschlagen werden.
Bei SHA-1 wird die Nachricht m in 512-bit-Blöcke zerlegt m1 , m2 , · · · , mL und
dann blockenweise verarbeitet. Jeder Block mi wird in 16 32-Bit-Unterblöcke
(0)
(15)
(Wort) eingeteilt, die wir mit mi , · · · , mi
bezeichnen. Aus diesen Unterblöcken werden 80 Wörter Wt , t = 0, · · · , 79 auf folgende Weise erzeugt.
(
(t)
mi
für t = 0, 1, · · · , 15,
Wt =
(Wt−3 ⊕ Wt−8 ⊕ Wt−14 ⊕ Wt−16 ) << 1 für t = 16, · · · , 79.
Mithilfe von Wt , 0 ≤ t ≤ 79 werden 80 Rechenoperationen durchgeführt, um
den Inhalt des Speichers (5 Wörter) in jedem Schritt zu aktualisieren. Zu diesem
Zweck benötigen wir die folgenden Konstanten Kt , t = 0, · · · , 79.

5a827999 0 ≤ t ≤ 19



6ed9eba1 20 ≤ t ≤ 39
Kt =

8f 1bbcdc 40 ≤ t ≤ 59



ca62c1d6 60 ≤ t ≤ 79
und die folgenden Funktionen ft , t = 0, · · · , 79.

f (x, y, z)



g(x, y, z)
ft =

h(x, y, z)



g(x, y, z)
0 ≤ t ≤ 19
20 ≤ t ≤ 39
40 ≤ t ≤ 59
60 ≤ t ≤ 79
, wobei f, g und h die Grundfunktionen von MD4. Der Ablauf einer Operation
t sieht dann folgendermassen aus:
a) Setze T = (A << 5) + ft (B, C, D) + E + Wt + Kt .
b) (A, B, C, D, E) = (T, A, (B << 30), C, D).
Bezeichnen wir den Ergebniswert der (i − 1)-ten Iteration (0 ≤ i ≤ L) mit
(0)
(1)
(2)
(3)
(4)
Hi−1 = (Hi−1 , Hi−1 , Hi−1 , Hi−1 , Hi−1 )
58
Kapitel 3 Die Merkle-Damgård Konstruktion
Dann wird der Ergebniswert der nächsten Iteration wie folgt berechnet:
(0)
= A + Hi−1
(0)
(1)
= B + Hi−1
(2)
= C + Hi−1
(3)
= D + Hi−1
(4)
= E + Hi−1
Hi
(1)
Hi
(2)
Hi
Hi
(3)
(4)
Hi
5. Schritt (Hashwertaugabe)
Der ausgegebene 160-Bit-Hashwert ist die Konkatenierung der 5 Wörter-Speicher
(160 Bit) (A, B, C, D, E). Formal heisst das
(0)
(1)
(2)
(3)
(4)
SHA1(m)= HL ||HL ||HL ||HL ||HL ,
wobei L die Blockanzahl der Nachricht m.
2. Sicherheit
Die Hashfunktion SHA-1 bildet Hashwerte mit 160 Bit und somit gibt es also
2160 Möglichkeiten für verschiedene Werte. Will man eine Kollision (mit einem
Kollisionsangriff) finden, so würden bereits 280 Operationen genügen. Das bedeutet, die Sicherheit der SHA-1 beruht auf diesen mindestens 280 Operationen
und damit der technischen Unmöglichkeit eines solchen Angriffs.
1998 haben Florent Chabaud und Antoine Joux [15] einen Angriff auf SHA-0
vorgestellt, der die Komplexität auf 261 (Statt 280 mit dem Geburtstagangriff)
reduziert. 2004 haben Eli Biham [23] Rafi Chen zunächst die sogennante NearKollision7 und dann später eine volle Kollision gefunden.
Mitte Februar 2005 stellte das chinesische Wissenschaftsteam [72] eine Methode
vor, mit der sich eine Kollision für SHA-0 mit einem Aufwand weniger als 239
finden lässt. Fünf Monate später wurde der erste Angriff [77] auf die volle SHA-1
von demselben Team veröffentlicht, der den Rechenaufwand weniger als 269 für
die Berechnung einer Kollision benötigt. Im Oktober 2005 wurde dieser Aufwand
nach unten auf 263 korrigiert .
7
eine Near-Kollision sind zwei verschiedenen Nachrichten mit einem ähnlichenHashwert. Vereinfacht
gesagt, die zwei Nachricht unterscheiden sich nur in eine keine Menge von Bits.
59
Kapitel 3 Die Merkle-Damgård Konstruktion
Auf der Konferenz Crypto 2006 wurde ein erweiterter Angriff von Rechberger
vorgestellt, welcher auf einer reduzierten Variante der SHA-1 mit 64 Berechnungsrunden anwendbar ist. Bei der neuen Angriff kann ein Teil der gefälschten
Nachricht frei gewählt werden.[14]. Nach Einschätzung der Experten lässt sich
dieser auch auf die vollständige Variante verallgemeinern. Dies wurde von Entwickler dieses Angriffs vermutet, indem der frei wählbare Anteil sich durch weitere Optimierung des Angriffs noch steigern lässt.
Bisher wurden noch keine praktische Angriffe gegen die SHA-2 Familie veröffentlicht. Manche Kryptanalytiker bezweifeln, ob sie tatsächlich die mögliche kurzfristig Alternativen zu SHA-1 sind. Der Grund dafür ist, dass sie zur selben
Familie wie SHA-1 gehören und somit unter Umständen gegen dieselben Attacken anfällig sind. Eine weitere Alternative ist die Tiger-Hashfunktion, die in der
nächten Abschnitt beschrieben wird.
3.6.3 Tiger
1. Beschreibung:
Tiger ist eine Hashfunktion, die von Ross Anderson und Eli Biham im Jahr 1996
entwickelt wurde und Haswerte der Länge 192 Bit produziert. Sie ist noch nicht
patentiert und besitzt noch zwei weitere Version 128 und 160. Eine Besonderheit dieser Hashfunktion besteht an ihrer Performanz. Laut den Tiger-Autoren
besitzt diese Hasfunktion eine gute Performance im Vergleich zu SHA-1. Sie ist
bis zu 3 mal schneller als SHA-1, wenn sie auf 64-Bit-Prozessoren getestet wird.
Tiger arbeitet mit 512 Bit Blöcken, die folgendermassen erzeugt werden:
1. Schritt (Padding-Bits)
Das Padding verläuft ähnlich wie bei MD4.
2. Schritt (Längenpadding)
Das Längenpadding ist analog zu MD4.
3. Schritt (Initialisierung des MD-Speichers)
Es wird ein 3 64-Wort-Puffer (eine Wort ist ein 64-Bit-String) (a, b, c) verwendet,
welches wie folgt mit hexadezimalen Werten initialisiert ist:
a : 0123456789ABCDEF
b : F EDCBA9876543210
c : F 096A5B4C3B2E187
4. Schritt (Verarbeitung der Nachricht)
Diees Phase erfolgt in 4 Schritten
60
Kapitel 3 Die Merkle-Damgård Konstruktion
• Sicherung der Initialwerte:
Die Sicherung erfolgt durch
aa = a
bb = a
cc = c
• Verarbeitungsphase:
Jeder 512-Bit-Block wird in 8 64-Bit-Teilblöcke zerlegt, die jeweils in drei
Durchläufe verarbeitet werden, wobei jeder Durchlauf aus 8 Runden besteht.
Bezeichnen wir mit M einen Nachrichtenblock, welcher in Teilblöcke xi mit
je 64 Bits eingeteilt wird. Das heisst:
M = x0 ||x2 || · · · ||x7 .
Wie die Abbildung 3.7 zeigt , werden in jeder Runde die folgende Operationen für jedes xi unter Verwendung von zwei booleschen Funktionen namens
EV EN und ODD durchgeführt:
a
a
b
b
=
=
=
=
a ⊕ xi
a − EV EN (c)
b − ODD(c)
(Const) · b
Diese Funktionen benutzen vier S-Boxen T1 , · · · T4 : {0, 1}8 → {0, 1}64 und
sind wie folgt definiert:
EV EN (y) = T1 (y[0]) ⊕ T1 (y[2]) ⊕ T1 (y[4]) ⊕ T1 (y[6])
ODD(y) = T1 (y[1]) ⊕ T1 (y[3]) ⊕ T1 (y[5]) ⊕ T1 (y[7]),
wobei y[i] das i-te Byte des Wortes y bezeichnet, 0 ≤ i ≤ 7.
• Key-Schedule-Phase:
Nach der Bearbeitung jedes Blocks wird dann eine Key-Schedule-Prozess
unter Verwendung der Teilblöcke xi , zweier Konstanten (bezeichnet mit
Cont1 und Cont2 ) und der bitweise Operationen ausgeführt. Der Ablauf
61
Kapitel 3 Die Merkle-Damgård Konstruktion
Abbildung 3.7: Die Tiger-Kompressionsfunktion.
der Key-Schedule ist algorithmisch wie folgt vorgestellt:
x0
x1
x2
x3
x4
x5
x6
x7
x0
x1
x2
x3
x4
x5
x6
x7
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
x0 − (Cont1 ⊕ x7 )
x1 ⊕ x0
x2 + x1
x3 − (x2 ⊕ (¬x1 << 19))
x4 ⊕ x3
x5 + x4
x6 − (x5 (¬x4 >> 23))
x7 ⊕ x6
x0 + x7
x1 − (x0 ⊕ (¬x7 << 19))
x2 ⊕ x1
x3 + x2
x4 − (x3 ⊕ (¬x2 >> 23))
x5 ⊕ x4
x6 + x5
x7 − (x6 ⊕ Cont2 )
62
Kapitel 3 Die Merkle-Damgård Konstruktion
mit
Cont1 = A5A5A5A5A5A5A5A5
Cont2 = 0123456789ABCDEF.
• Feedforward-Phase:
Mithilfe der gesicherten Werte werden die Anfangswerte für den nächten
Block wie folgt vorbereitet:
a = aa ⊕ a
a = bb − b
b = cc + c
5. Schritt (Hashwertaugabe)
Der Tiger-Hashwert ist die Konkatenation der 3 64-Bit-Werte a, b und c, welche
sich aus der Bearbeitung des letztes Nachrichtenblocks nach der FeedforwardPhase ergeben.
2. Sicherheit:
Es ist offensichtlich, dass die Tiger-Hashfunktion ein höhes Sicherheitniveau besitzt, da sie eine 192-Bit Hashwert produziert. Wie wir gesehen haben, unterscheidet sich die Tiger-Kompressionsfunktion völlig von der Kompressionsfunktionen der MD.bzw SHA-Familie. Diese Funktion verwendet die im Gegensatz
zu MD-Familie einen Key Schedule Algorithmus sowie algebraische Kombinationen von Funktionen, die nach Kryprtoexperten als ein wichtiger Bestandteil der
globalen Struktur der Tiger angesehen sind. Deswegen scheint Tiger sicherer als
SHA-1 zu sein.
Da die Tiger-Hashfunktion sich demnächst als alternative für eine langfristige
Perspektive anbietet, wurde in der letzten Zeit intensiv analysiert. Die Ergebnisse haben gezeigt, dass die reduzierten Versionen von Tiger gegen KollisionsPreimage-Angriffe anfällig sind. 2006 haben John Kelsey und Stefan Lucks [34]
Kollisionen bzw. Near-Kollisionen für die 16-reduzierte bzw. 20-reduzierte Variante gefunden. Ihre Angriffsstartegie war eine differentielle Kryptoanalyse, welche auf die Message-Modification-Techniques basieren. Vereinfacht gesagt, wählte
man so lange zwei Nachrichten m und m0 mit bestimmter Differenz bis diese kollidieren. Darauf aufbauend stellten F.Mendel, B. Preneel, V.Rijmen, H.Yoshida
und D.Watanabe [26] während der Indocrypt Konferenz 2006 einen neuen differentiellen Angriff vor, in dem die Wahrscheinlichkeitsverhalten der Ausgabe der
Key-Schedule-Phase betrachtet wurde. Sie haben gezeigt, dass der Aufwand zum
Auffinden einer Kollision bzwz einer Near-Kollision für die 19- bzw. 22-reduzierte
63
Kapitel 3 Die Merkle-Damgård Konstruktion
Tiger-Version zwischen 262 und 269 liegt bzw. etwa 244 beträgt. In Hinsicht auf
die Preimage-Resistenz präsentierten Indesteege und Preneel in WEWoRC 2007
(Western European Workshop on Research in Cryptology) Preimage-Angriffe
auf die Tiger-Kompressionsfunktion. Schließlich kam man zum Ergebnis, dass
solche Angriffe auf die reduzierten Tiger-Varianten 12 bzw. 13 einen Aufwand
von 263.5 bzw. 264 Kompressionsfunktion benötigen.
64
Kapitel 4
Blockchiffren-basierte Hashfunktionen
4.1 Motivation
Im vorhergehenden Kapitel haben wir den iterativen Ansatz zur Konstruktion von Hashfunktionen kennen gelernt und keine explizite Form für die Kompressionsfunktionen
angegeben. Die einfachste Methode, eine Hashfunktion zu konstruieren, besteht in der
Verwendung einer Blockchiffre als Kompressionsfunktion. Der Vorteil dieser Methode ist, dass es einerseits bereits effizienten Implementierungen von Blockchiffren gibt,
und anderseits wenn eine Blockchiffre wie DES [2] und AES [1] gewisse Sicherheitseingenschaften besitzt ,liegt es nahe, diese so weit wie möglich auf die Hashfunktion zu
übertragen. So kann man sich die Zertifizierung ( das Überprüfen ) einer Hashfunktion
ersparen. Diese Eigenschaft wurde von Merkle in [45] pre-certified“ genannt.
”
Zur Konstruktion von Hashfunktionen auf der Basis von Blockchiffren gibt es mehrere Möglichkeiten: Am häufigsten wird die mit einer Hashfunktion zu bearbeitende
Nachricht in gleich lange Blöcke gespalten, die der Schllüssellänge entsprechen. Der
Hashwert wird daraus erzeugt, indem jeder dieser Blöcke als Schlüssel nacheinander
mit einem beliebigen Initial-Block bearbeitet wird. Eine andere Möglichkeit besteht
darin, dass einen festen Schlüssel verwendet wird, mit dem die zu bearbeitende Nachricht blockweise verschlüsslt wird. Der Hashwert wird gewonnen, indem jeder Block
mit dem vorhergehenden durch eine XOR-Operation verknüpft. Neben der soeben
vorgestellten Einsätze von Blockchiffren als Kompressionsfunktion gibt es weietere
Möglichkeiten, welche im Laufe dieses Kapitels erläutert werden.
Bevor wir uns genau anschauen, wie sich eine Hashfunktion durch Blockchiffren konstruieren lässt, sollten wir uns erst einmal klar machen, wie Blockchiffren überhaupt
gebaut sind und welche grundlegenden Kriterien besitzen.
65
Kapitel 4 Blockchiffren-basierte Hashfunktionen
4.2 Grundlagen und Definitionen
Blockchiffren sind symmetrische1 Verschlüsselungsalgorithmen. Sie arbeiten eine Nachricht blockweise ab. Jede Nachrchrit wird zunächst in einzelne, jeweils gleichlange
Blöcke aufgeteilt (meist 64 oder 128 Bit), welche anschliessend unter Verwendung eines Geheimschlüssels unabhängig voneinander verschüsselt sind.
Wenn die Länge der zu verschlüsselnden Nachricht kein Vielfaches der Blockgrösse ist,
wird üblicherweise der letzte Block auf die fest vorgegebene Blockgrösse aufgefüllt (so
genanntes Padding). Die wichtige Größen bei einer Blockchiffre sind die Blocklänge
n und die benutzte Schlüssellänge k. Vereinfacht kann man die Funktionsweise einer
Blockchiffre wie folgt darstellen:
1. Es wird ein geheimer Schlüssel gewählt.
2. Die Nachricht wird in viele gleichlange Blöcke mi zerlegt, m1 , m2 , · · · , mr .
3. Mit einem Algorithmus wird jeder dieser Blöcke mit Hilfe des Schlüssel verschlüssselt. Der Chiffretext c ergibt sichdurch die Konkatenation dieser Chiffretextblöcke, die gleichgross wie den Klartext ist, also c = c1 ||c2 || · · · ||cr .
4. Mit dem inversen Algorithmus und demselben Schlüssel kann aus der
verschlüsselten Nachricht blockweise der Klartext wiederhergestellt werden.
Mathematisch ausgedrückt heißt das, dass eine Blockchiffre aus einer Funktion e besteht, die zwei Eingabewerte in jeder Iteration bekommt, nämlich der Nachrichtenblock
mi und den Schlüssel K. Für eine formale Beschreibung einer Blockchiffre wird die
folgende Definition gegeben, die dem Skript [27] entnommen ist.
Definition 4.1 (Blockchiffre)
Eine Blockchiffre ist eine Funktion e : D → R, wobei D = {0, 1}k × {0, 1}n → {0, 1}n
und R = {0, 1}n mit k, n ≥ 1. Diese Funktion nimmt zwei Eingabewerte, einen
Schlüssel K ∈ {0, 1}k und einen Klartext m ∈ {0, 1}n an und gibt einen Chiffretext
c ∈ {0, 1}n zurück mit c = e(K, m). Für jeden Schlüssel K ∈ {0, 1}k wird die Funktion
eK (·) als eK (·) = e(K, ·) definiert. Also für jede Blockchiffre e mit dem Schlüssel K
kann die Funktion eK als eine Permutation auf {0, 1}n aufgefasst werden.
Beispiel
Die AES bzw. Advanced Encryption Standard ist einer der bekanntesten Blockchiffre.
Sie verwendet einen Schlüssel der Länge 128,192 oder 256 Bits und verarbeitet Nachrichten, deren Blöckgrösse 128 Bits beträgt.
1
Ein Verfahren wird als symmetrisch bezeichnet, wenn sowohl zum Ver- als auch zum Entschlüsseln
der gleiche Schlüssel verwendet wird.
66
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Jede Blockchiffre ist eine Verschlüsselungsfunktion und daher besitzt eine Umkehrfunk2
tion e−1
K , weil sie eine Permutation ist. Diese Funktion wird als Entschlüsselungsfunktion
bezeichnet und benutzt denselben Schlüssel K . Für jede Nachricht m, die mit dem
Schlüssel K chiffriert ist, gilt die folgende Beziehung :
m = e−1
K (eK (m)).
Nun bezeichnen wir mit Ek,n die Menge aller Blockchiffren, die auf {0, 1}k × {0, 1}n
definiert sind. Daraus erhalten wir die folgende Definition
Definition 4.2 (Ideale Blockchiffre)
Eine Ideale Blockchiffre ist eine Blockchiffre, die zufällig aus Ek,n gewählt ist. Eine
ideale Blockchiffe wird mit ê bezeichnet.
Um Aussagen über die Sicherheit von Blockchiffren-basierte Hashfunktionen treffen zu
können, wird zunächst ein formales Angriffsmodell aufgestellt und die zu beweisende
Sicherheitseigenschaft in diesem Modell definiert. Dann soll gezeigt werden, ob die zugrunde liegende Blockchiffre diese Eigenschaft erfüllt. Eine der wichtigsten Eigenschaften bei Blockchiffren ist, dass sie gute Pseudozufallspermutationen (Pseudo-Random
Permutationen (PRP)) sind. Das heisst, jede Blockchiffre eK mit einem Schlüssel K
lässt sich nicht von einer echt zufälligen Permutation unterscheiden werden. Das auf
dieser Eigenschaft basierende Sicherheitsmodell wird als Standardmodell bezeichnet.
Allerdings wurde in [66] gezeigt, dass eine Blockchiffre, welche lediglich die Pseudozufallseigenschaft besitzt, keine sichere Konstruktion von Hashfunktionen garantiert.
D.h es kann keine hilfreichen Hinweise geben, die einen Sicherheitsbeweis der Konstruktion erlauben. Deswegen soll die Sicherheit in einem neuen Modell untersucht
werden. Das neue Sicherheitsmodell geht auf Shannon [64] zurück und wird das Ideale
Chiffremodell (Ideal Cipher Model) genannt. In der Literatur wird dieses häufig als
Blockchiffre-Modell (Block cipher Model) oder Shannon-Modell (Shannon model) bezeichnet.
Definition 4.3 (Das Ideale Chiffremodell)(ICM)
In einem idealen Chiffremodell wird eine Blockchiffre als eine Funktion aufgefasst, ohne weitere Details der Verschlüsselungsfunktion zu kennen. Die einzigen Angaben, die
als bekannt vorausgesetzt werden können, sind die Block- und Schlüssellänge.
2
Der Beweis dafür, dass eine Verschlüsselungsfunktion eine Permutation ist, findet man im Buch
[13] S. 68.
67
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Mit anderen Worten besitzt die Blockchiffre keine besondere mathematische Struktur,
welche durch einen Angreifer ausgenutzt werden kann.
Bemerkung 4.1
Die Betrachtung dieses Modells ist nicht realistisch genug, weil reale Blockchiffren
häufig bereits bekannte Schwächen wie Bit Dependence Criterion (BDC)3 aufweisen,
welche nicht von einer idealen Blockchiffre zu erwarten sind.
Bemerkung 4.2
Das Ideale Cipher Modell ist dem Zufallsorakelmodell (ROM) [6, 25] mit folgenden
bemerkenswerten Ausnahmen ähnlich:
• Ein Angreifer, der mit einem idealen Chiffre-Orakel (ICO) kommuniziert, hat den
Zugang zu Orakeln eK und e−1
K ,wobei eK eine Blockchiffre mit k-bit Schlüsseln
k
aus einer Familie von 2 Zufallspermutationen ausgewählt wird. Um den Chiffretext c = eK (m) zu erfahren, stellt er dem Orakel e die Frage (K, m), während
er dagegen den Klartext m erhält, indem er die Anfrage (K, c) an das Orakel
e−1 sendet.
• Die Blöcklänge der idealen Blockchiffre (IC) ist im Voraus festgesetzt, d.h das
IC ein endliches Objekt ist, während das RO immer unendlich ist.
Definition 4.4 (Blockchiffre-basierte Kompressionsfunktion)
Eine Blockchiffre-basierte Kompressionsfunktion ist eine Funktion f
f : Ek,n × ({0, 1}a × {0, 1}b ) → {0, 1}n
wobei a, b und c natürliche Zahlen sind mit a + b ≥ n.
Für eine feste Blockchiffre e aus Ek,n erhalten wir eine Kompressionsfunktion f e mit
f e : {0, 1}a × {0, 1}b → {0, 1}n
Definition 4.5 (Blockchiffre-basierte Hashfunktion)
Eine Blockchiffre-basierte Hashfunktion ist eine Funktion he
he : Ek,n × {0, 1}∗b → {0, 1}n
so dass für eine Nachricht
m = m1 ||m2 || · · · ||ml
3
Unter BDC versteht man die Existenz einer Korrelation zwischen zwei Ausgabebitänderungen bei
Änderung eines Eingabebits
68
Kapitel 4 Blockchiffren-basierte Hashfunktionen
gilt
he (m) = hl , hi = f e (hi−1 , mi ), 1 ≤ i ≤ l, h0 ∈ {0, 1}n .
Definition 4.6 (Hash-Rate)
Wenn genau q Anfragen der Blockchiffre q benötigt werden, um die Berechnung von
f e (h, m) durchzuführen, dann besitzt die Kompressionsfunktion f ( und daraus entstehende Hashfunktion) die Hash-Rate r mit r = (b/n)/q.
Eine Hash-Rate einer Kompressionsfunktion ist die durchschnittliche Anzahl der Nachrichtenblöcke, die nach einem einzelnen Aufruf der zugrundeliegende Blockchiffre bearbeitet werden. Die Hash-Rate dient grundsätzlich dazu , die Effizienz einer Blockchiffrebasierte Hashfunktion zu beurteilen. Je kleiner die Hash-Rate ist, desto schlechter ist
auch die Effizienz der Hashfunktion. Deswegen wird stets zum Effizienzvergleich der
Hashfunktionen berücksichtigt. Beispielsweise für b/n = 3 und q = 2 erhalten wir eine
(3/2)-Rate-Kompressionsfunktion.
$
Im Folgenden bezeichnen mit x ← S das Ereignis , dass ein Element x zufällig aus der
endlichen S Menge ausgewählt wird.
Zur Untersuchung einer Blockchiffren-basierte Hashfunktion auf die Kollisionsresistenz, wird zunächst jede Blockchiffre durch eine zufällig gewählte Blockchiffre e aus
der Menge Ek,n instanziert. Will ein Angreifer eine Kollision für eine Blockchiffrebasierte Hashfunktion he finden, so sendet er insgesamt q Anfragen. Eine Kollison für
he ist ein Nachrichtpaar (m, m0 ) mit he (m) = he (m0 ).
Zur Bewertung der Sicherheit dieser Hashfunktion im Bezug auf Kollisionsresistenz
wird der Rechenaufwand als Funktion in Abhängigkeit von q betrachtet und mit der
Erfolgswahrscheinlichkeit zum Finden einer Kollision verglichen.
Im Folgenden definieren wir drei verschiedene Begriffe von Resistenz und setzen he = h
für den Rest des Kapitels.
Definition 4.7 (Kollisionsresistenz)
Sei h eine Blockchiffren-basierte Hashfunktion mit h : Ek,n ×{0, 1}∗ → {0, 1}n ,k, n, a ≤
1. Der Vorteil (Advandage) eines Angreifers A zum Finden einer Kollision für h ist
gegeben durch
AdvhKoll (A)
h
i
$
$
0
e,e−1
0
0
= Pr e ← Ek,n ; (m, m ) ← A
: m 6= m ∧ h(m) = h(m )
Für q ≥ 1 definieren wir AdvhKoll (q) = maxA AdvhKoll (A) , wobei das Maximum über
alle Gegner genommen wird, welche höchstens q Anfragen an beiden Orakeln e und
e−1 stellen.
69
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Neben der Kollisionsresistenz der Hashfunktionen, interessieren wir uns auch für deren
Inverse, d.h die Preimage- und die zweite Preimage-Resistenz.
Definition 4.8 (Preimage-Resistenz)
Sei h eine Blockchiffren-basierte Hashfunktion,h : Ek,n × {0, 1}∗ → {0, 1}n , wobei
k, n ≥ 1. Der Vorteil (Advandage) eines Angreifers A zum Finden eines Urbilds für h
ist gegeben durch
h
i
−1
$
$
$
AdvhP re (A) = Pr e ← Ek,n ; τ ← {0, 1}a ; m ← Ae,e (τ ) : h(m) = τ .
Definition 4.9 (2nd -Preimage-Resistenz)
Sei h eine Blockchiffren-basierte Hashfunktion,h : Ek,n × {0, 1}∗ → {0, 1}a , wobei
,k, n ≥ 1. Der Vorteil (Advandage) eines Angreifers A zum Finden eines zweiten
Urbilds für h ist gegeben durch
i
h
−1
$
$
$
AdvhsP re (A) = Pr e ← Ek,n ; m ← {0, 1}n ; m0 ← Ae,e (m) : h(m) = h(m0 ) .
Wie schon bereits erwähnt, bietet sich die Möglichkeit an, mittels n-Bit-Blockchiffren
Hashfunktionen zu konstruieren. Diese Blockchiffren haben die Eigenschaft, sich des
iterativen Ansatzes zu bedienen.
Die Nachricht, für die der Hashwert zu berechnen ist, wird zunächst in Blöcke mi
zerlegt. Die Blockgrösse entspricht je nach der Methode der Länge des Schlüssels bzw.
der Grösse der Klartextblöcke der verwendeten Blockchiffre.
Die am häufigsten in der Literatur vorgestellte Hashfunktionen lassen sich in zwei
Hauptklassen unterteilen:
1. Die Single-Block-Length-Hashfunktionen (SBL-Hash).
2. Die Double-Block-Length-Hashfunktionen (DBL-Hash).
Mit diesen wollen wir uns in der folgenden Abschnitte befassen.
4.3 Single-Block-Length Konstruktionen
Bei Single-Block-Length Hashfunktionen 4 handelt es sich um kryptographische Hashfunktionen, die einen Hashwert produzieren, der genauso groß wie die Blocklänge der
verwendeten Blockchiffre ist, d.h die Hashlänge und Blockgrösse sind gleich.
4
Single-Block-Length Hashfunktion wird als SBL-Hashfunktion abgekürzt
70
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Bevor wir mit der Beschreibung eines allgemeinen Designprinzips anfangen, wollen wir
uns als Motivation zuerst einmal drei wichtige Hashfunktionen vorstellen, auf welche
in der Literatur viel Aufmerksamkeit gerichtet wurde.
4.3.1 Beispiele als Motivation
In der nachstehenden Beispiele bezeichnen wir mit k die Schlüssellänge und mit n die
Blocklänge der verwendeten Blockchiffre. Wie in der Definition 4.5 bezeichnen wir mit
hi der Zwischenhashwert der Hashfunktion, wobei h0 ein fester Startwert ist und hl
der endgültige Hashwert.
4.3.1.1 Matyas-Meyer-Oseas-Verfahren
Die Matyas-Meyer-Oseas Hashfunktion5 gilt als eine der ersten sicheren Hashfunktionen, welche von S.Matyas, C.Meyer und J.Oseas in [67] veröffentlicht. Das Schema ist
im Teil 2 des ISO-Standards (10118-2) definiert und als Generator allenn auf Blockchiffren basierten Hashfunktionen festgeschrieben.
Zuerst wird eine Nachricht in l Blöcke mi der Länge n zerlegt. Wie die Abbildung
4.1 zeigt, wird der Nachrichtenblock mi als Klartext genommen. Durch eine entsprechende Funktion g wird das Zwischenergebnis hi−1 so verändert, dass das Ergebnis als
Schlüssel geeignet ist, falls die Schlüssel- und Blocklänge unterschiedlich sind. Besitzt
aber hi−1 bereits die richtige Länge, so kann die Funktion g einfach weggelassen werden. Unter Verwendung einer XOR-Operation wird der resultierende Chiffretextblock
mit dem aktuellen Nachrichtenblock mi verknüpft, um den neuen Zwischenwert hi zu
berechnen:
hi = eg(hi−1 ) (mi ) ⊕ mi , 1 ≤ i ≤ l.
Diese Hashfunktion besitzt eine Hash-Rate1, weil es genau eine Verschlüsselung benötigt
wird, um den Hashwert eines Nachrichtenblocks zu produzieren.
wie bereits erwähnt, ist dieses Schema als einer der sicheren Konstruktionen angesehen,
da es keinen anderen Angriffe auf dieses Schema außer dem Geburtstagangriff bekannt
gegeben wurde. Diese Sicherheit kann wie folgt begründet werden:
Bei der Kenntniss des Schlüssels besteht das Ziel eines Angreifers darin, zwei Nachrichten m und m0 zu finden, welche denselben Hashwert liefern. Vereinfachen wir die
Situation zunächst etwas: Angenommen, daß die gesuchte Nachrichten jeweils aus einzelnem Block bestehen. Daraus ergibt sich die folgende Beziehung:
5
Matyas-Meyer-Oseas wird häufig mit MMO-Schema genannt.
71
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Abbildung 4.1: Die Matyas-Meyer-Oseas-Hashfunktion.
m ⊕ eK (m) = eK (m0 ) ⊕ m0 ⇔ m ⊕ m0 = eK (m) = eK (m0 ).
Unter Annahme, dass die Blockchiffre einen zufällig gleichverteilten Chiffretextblock
aus einem Klartextblock erzeugt, sollte für die soeben aufgestellte Gleichung nicht
einmal klar sein, ob sie lösbar ist; d.h für einen Angreifer sollte es schwierig sein,
solche Nachrichten zu finden.
4.3.1.2 Davies-Meyer-Verfahren
Davies-Meyer-Verfahren6 wird häufig auch als duales Verfahren zum Matyas-MeyerOseas-Verfahren bezeichnet, weil hier die Rolle vom Zwischenergebnis hi−1 mit der
Rolle vom Nachrichtenblock getauscht wird.(Siehe die Abbildung 4.2).
zum MMO-Schema wird zunächst die Nachricht in l Blöcke der Länge k geteilt, die
als Schlüssel der aktuellen Nachrichtenblock dient. Der Zwischenergebnis hi−1 der vorherigen Runde geht als Klartext in die Blockchiffre ein:
hi = emi (hi−1 ) ⊕ hi−1 , 1 ≤ i ≤ l.
6
das Verfahren wird D.Davies in [75, 74] und C.Meyer in [17] zugeschrieben,aber D.Davies hat in
einer persönlichen Nachricht bestätigt, dass er nicht das Schema vorgeschlagen hat. Trotzdem ist
weithin als Davies-Meyer-Schema bekannt und ist häufig mit DM-Hashfunktion bezeichnet
72
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Abbildung 4.2: Die Davies-Meyer-Hashfunktion.
Die Hash-Rate dieser Hashfunktion beträgt k/n. Ist die Blocklänge n größer als die
Schlüssellänge k, so wird die Performanz dieser Hashfunktion im Vergleich zu dem
MMO-Schema kleiner. Beispielsweise bei der Verwendung der Blockchiffre DES in
Davies-Meyer-Schema ist die Hash-Rate gleich 7/8, da die DES eine 56 Bit-Schlüsselund 64 Bit-Blocklänge benutzt. Bei einer auf AES basierenden Davies-Meyer-Hashfunktion
erhält man die Räte 1, 1.5 oder 2, je nachdem, ob die Schlüssellänge der AES4.2 128,192
oder 256 beträgt.
Was die Sicherheit dieses Schemas betrifft, wurde es in [57] gezeigt, dass diese Hashfunktion gegen den Fixpunkte-Angriff einige Schwachstellen aufweist. im Grundsätzlichen
für Hashfunktionen, welche Nachrichtenblöcke mi als Schlüsseln benutzen, ist es recht
einfach, eine Menge von Fixpunkten für deren liegenden Kompressionsfunktionen
f (h, m) = em (h) ⊕ h folgendermaßen zu finden:
1. Wähle zufällig eine Nachricht m aus.
2. Berechne h = e−1
m (0).
3. Dieses Ergebnis ist ein Fixpunkt für f : f (h, m) = h.
Ein solcher Angriff stellt in der Praxis keine Gefahr dar. Man könnte ihn erschweren
und abwehren, indem man das so genannte Präfixfreie Encoding 7 für die Nachricht
durchführt oder die Länge der Nachricht nach der Paddingprozess hinzufügt.
7
Dieser Ansatz wurde in [31] als eine alternative Lösung vorgeschlagen, um die Schwäche der iterativen MD-Konstrunktion gegen alle mögliche generischen Angriffe zu beseitigen.
73
Kapitel 4 Blockchiffren-basierte Hashfunktionen
4.3.1.3 Miyaguchi-Preenel-Verfahren
Die Miyaguchi-Preenel-Hashfunktion [61] ist eine erweitere Variante des Matyas-MeyerOseas-Schema,welche von Shoji Miyaguchi und Bart Preneel unabhängig voneinander
vorgeschlagen wurde. Sie wird bei der Konstruktion von Wihrpool-Hashfunktion verwendet. Der Unterschied zu MMO-Hashfunktion ist es, dass das Zwischenergebnis
hi−1 zusätzlich zu mi mit der XOR-Operation hinzugefügt werden muss.(Siehe Abbildung 4.3). Diese Hashfunktion besitzt auch die Hash-Rate 1.
Abbildung 4.3: Die Miyaguchi-Preenel-Hashfunktion.
4.3.2 Preneel-Govaets-Vandewalle-Konstruktionen (PGV)
Wie wir an obigen Beispiele gesehen haben, handelt sich es tatsächlich um drei sicheren
Single-Block-Length Hashfunktion. Wir wollen nun nach der Existenz von ähnlichen
Hashfunktionen fragen. Leider ist es nicht bekannt, welche Eigenschaften eine Blockchiffre besitzen sollte, um einen guten Baustein einer Hashfunktionen darzustellen.
Die wichtige Bemerkung, die wir aus den drei Beispiele ziehen können, ist die, dass
die drei Hashfunktionen nach einem recht einfachen Prinzip entworfen sind. Dieses
Konstruktionsprinzip wurde von Preneel, Govaets und und Vandewalle in [57] vorgeschlagen, mit dem Absicht, weitere sicheren Variationen der SBL-Hashfunktionen zu
74
Kapitel 4 Blockchiffren-basierte Hashfunktionen
entwerfen.
Bei einem PGV-Schema handelt sich um eine Hashfunktion, deren Interna aus einer
Kompressionsfunktion besteht, die eine abstrakte n-Bit-Blockchiffre verwendet. Diese
besitzt zwei Parametern als Eingabe, ein Schlüssel und ein Klartext, und gibt einen
Chiffretext zurück. Dieses Ergebnis wird dann mit einem Forwarding-Parameter per
XOR-Operation verknüpft, um den nächsten Zwischenhashwert zu berechnen. Der
formale Ablaul der Hashberechnung ist in der Abbildung 4.4 dargestellt und wird wie
folgt beschrieben:
hi = eAk (Ak ) ⊕ Ak , k = 1, 2, 3 für ein Startwert h0 = IV,
wobei jedes Ak einen Wert aus der Menge {mi , hi−1 , hi−1 ⊕ mi , v} nehmen kann. Zum
Vereinfachen setzen wir wi = hi−1 ⊕ mi .
Abbildung 4.4: Schematische Darstellung der PGV-Konstruktionen.
Nachdem wir das allgemeine PGV-Designprinzip vorgestellt haben, wollen wir nun
die Sicherheit dieser Konstruktionen auf zwei verschiedene Weise untersuchen, die im
Folgenden die PGV- bzw. ICM-Analyse genannt werden.
75
Kapitel 4 Blockchiffren-basierte Hashfunktionen
4.3.2.1 PGV-Analyse
Die PGV-Konstruktion besteht insgesamt aus 43 = 64 Schemata, da die drei Variable Ak , k = 1, 2, 3 aus einer vierelementigen Menge {mi , hi−1 , hi−1 ⊕ mi , v} ausgewählt
werden können.
Bei der PGV-Analyse [57] ging es darum, diese Hashfunktionen daraufhin zu testen, ob
alle in der Lage sind, gegen fünf verschiedenen Angriffe widerstehen zu können, d.h die
PGV-Analyse ist eine angriffsbasierte Untersuchung. Diese Angriffe bezogen sich nicht
auf die Hashfunktionen sondern auf die zugrunde liegenden Kompressionsfunktionen.
Dabei handelt es sich um die folgende Gleichung unter bestimmten Bedingungen nach
einer oder meherer Variablen zu lösen:
hi = f (hi−1 , mi ),
wobei mi der Nachrichtenblock ist, während hi und hi−1 die Zwischenergebnisse darstellen. Diese Angriffe werden im Folgenden kurz vorgestellt und erklärt.
• Direkter Angriff (D): Dieser Angriff besteht darin, zu gegebenen mi und hi
jeweils ein mi 6= m0i mit f (hi−1 , mi ) = f (hi−1 , m0i ) zu finden ( bzw. zu hi und
hi−1 ein mi , wenn kein Urbild bekannt ist). Dieser Angriff ist nicht überhaupt
zur Ermittelung von sinnvollen Urbilder geeignet.
• Permutation-Angriff (P): Dabei sind hi und hi−1 gegeben und es soll ein mi
ermittelt werden, so dass gilt:
hi = hi−1 ⊕ g(mi ),
wobei g eine Einwegfunktion ist, d.h die Kompressionsfunktion ist darstellbar
als Verkettung von einer XOR-Operation und einer Einwegfunktion. In diesem
Fall ist der Hashwert unabhängig von der Reihenfolge der Nachrichtenblöcke und
somit ist es möglich, ein Urbild bzw. eine Kollision für die Kompressionsfunktion
zu finden. Dies geschieht folgendermaßen:
Zur Vereinfachung betrachten wir zwei Nachrichten m und m0 , welche jeweils
aus drei Blöcke bestehen. Formal ausgedrückt:
m = m1 ||m2 ||m3 ,
m0 = m3 ||m1 ||m2 ,
deren Hashwerte mit H bzw. H 0 bezeichnet sind. Ist h0 ein Initialwert, so erhalten
wir
H = h0 ⊕ g(m1 ) ⊕ g(m2 ) ⊕ g(m3 ),
H 0 = h0 ⊕ g(m3 ) ⊕ g(m1 ) ⊕ g(m2 ).
76
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Da die XOR-Operation kommutativ ist, ergibt sich daraus, dass die beide Hashwerte übereinstimmen. Man kann hier feststellen, dass es nicht einfach ist, einen
Nachrichtenblock direkt aus der Gleichung hi = hi−1 ⊕ g(mi ) herauszufinden, Da
die Funktion g schwierig umzukehren ist.
• Forward-Angriff (F): Dieser Angriff ist eine Variante eines 2nd -PreimageAngriffs. Dabei können einige Teile des zweiten Urbildes frei gewählt werden.
Ist eine Nachricht m gegeben , so wird ein 2nd -Preimage m0 wie folgt konstruiert:
Bezeichne mit mi einen Nachrichtblock von m. Die Aufgabe bei diesem Angriff
besteht darin, zunächst für j < i alle mj durch m0j zu ersetzen und dann ein
m0i 6= mi zu bestimmen, sodass gilt
hi = f (hi−1 , mi ) = f (h0i−1 , m0i ).
• Backward-Angriff (B): Dieser Angriff besteht darin, zu gegebenem hi ein Paar
(hi−1 , mi ) mit hi = f (hi−1 , mi ) zu finden. Das geshieht folgendermaßen:
Die Gleichung hi = f (hi−1 , mi ) wird zunächst für ein gewünschtes mi nach hi−1
aufgelöst, mit dem Ziel, dass dieses einen nützlichen Wert ergibt. Ist nicht der
Fall, so wiederholt sich der Vorgang nochmal für kleine Modifikationen von mi .
• Fixpunkt-Angriff (FP): Bei diesem Angriff geht es darum, hi−1 und mi mit
hi−1 = f (hi−1 , mi ) zu finden. Solcher Angriff kann als 2nd -Preimage-Angriff aufgefasst werden, indem zu gegebenem hi−1 ein passendes mi sucht. Erfüllt f die
Eiwegfunktion, so lässt sich dieser Angriff schwierig durchzuführen.
Die Tabelle 4.1 stellt die Ergebnisse der PGV-Untersuchung dar. Mit s+ bzw. − kenngezeichnete Schemata entsprechen den sicheren bzw. schwachen Konstruktionen.
Preneel, Govaerts und Vandewalle [57] kamen zu einem wichtigen Ergebnis, dass nur 12
Kanditaten von gesamten Möglichkeiten sicher sind. Um dieses Ergebnis zu bestätigen,
wurde die DES-basierte Konstruktion untersucht. Das daraus resultierende Ergebnis zeigte, dass nur vier Hashfunktionen wirklich sind, während die 8 restlichen eine Schwachstelle bezüglich des Fixpunkte-Angriff aufweisen, aber das ist, wie schon
erwähnt, glücklicherweise durch den Präfixfreien Codierungs- Ansatz [16](Prefix-free
Encoding) vermeidbar.
Diese 12 sichere PGV-Hashfunktionen sind in der Tabelle 4.2 vorgestellt, wobei die 4
ersten sicher und die 8 restlichen anfällig gegen den Fixpunkte-Angriff sind.
Bemerkung 4.3
Es ist wichtig zu beachten, dass alle diese Konstruktionen eine gemeinsame Eigenschaften teilen. Bei jeder Iteration wird der Schlüssel verwendet, welcher in der vorherigen
Iteration bereitgestellt wurde. Das ist nicht der Fall bei gängigen Blockchiffren, die
77
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Feedforward Ak
v
mi
hi−1
wi
Schlüssel Ak
mi
hi−1
wi
v
mi
hi−1
wi
v
mi
hi−1
wi
v
mi
hi−1
wi
v
mi
−
D
B
−
−
s+
FP
−
P
D
FP
D
P
s+
B
P
Klartext Ak
hi−1 wi v
B
B
−
−
D
−
B
F
F
−
D
−
B
B
−
D
s+ D
FP B
B
D
B
−
FP FP
P
−
D
−
FP B
B
−
D
−
FP FP P
D
s+ D
B
F
F
D
F
D
Tabelle 4.1: PGV-Angriffe auf die 64 Konstruktionen.
No.
1
2
3
4
5
6
7
8
9
10
11
12
Kompressionsfunktion
ehi−1 (mi ) ⊕ mi
ehi−1 (wi ) ⊕ wi
ehi−1 (mi ) ⊕ wi
ehi−1 (wi ) ⊕ mi
emi (hi−1 ) ⊕ hi−1
emi (wi ) ⊕ wi
emi (hi−1 ) ⊕ wi
emi (wi ) ⊕ hi−1
ewi (mi ) ⊕ mi
ewi (hi−1 ) ⊕ hi−1
ewi (mi ) ⊕ hi−1
ewi (hi−1 ) ⊕ mi
Tabelle 4.2: Die 12 sichere PGV-Hashfunktionen.
über einen inneren Key Scheduling Algorithmus (KSA) verfügen. Liegt eine Blockchiffre mit eine langsamen Key Scheduling Algorithmus vor, so kann sich den Ansatz
der 12 Konstruktionen auf die Effizienz und die Qualität der daraus entstehenden
Hashfunktion vorteilhaft auswirken.
78
Kapitel 4 Blockchiffren-basierte Hashfunktionen
4.3.2.2 ICM-Analyse
Im vorhergehenden Abschnitt haben wir gesehen, dass sich lediglich 12 sichere Konstruktionen ergaben, welche ohne Beweise in [57] vorgestellt wurden.
Die Autoren in [57] haben einfach behauptet, dass es möglich ist, Sicherheitsbeweise
für diese Schemas geben zu können, auf die selbe Weise wie es in der Arbeit von Winternitz in [75] vorgestellt wurde. Dabei wurde es gezeigt, dass das MMO-Schema in
einem Modell sicher ist. Das Modell basiert grundsätzlich auf der Annahme, dass der
DES-Algorithmus als eine Black-Box angesehen werden soll. Das selbe Modell wurde
dann später von Merkle in [46] verwendet.
Die Analyse, mit der wir uns im Folgenden beschäftigen wollen, wurde zuerst im Jahr
2002 von Black, Rogaway und Schrimpton (BRS) [10] in 2002 veröffentlicht und später
von Lei Duo und Chao Li (DC) [21] im Jahr 2006 verbessert. Wir werden hier die letzte
Analyse vorstellen, da sie eine verbesserte Variante von BRS ist.
Diese Analyse wurde im Ideal-Cipher-Modell durchgeführt, in welchem jede PGVBlockchiffre e zufällig aus der Menge aller Blockchiffren Ek,n ausgwählt wurde. Die
Verschlüsselungsfunktion e (bezeichnet mit R1 ) und die Entschlüsselungsfunktion e−1
(bezeichnet mit R2 ) können als zwei verschiedenen Orakeln aufgefasst werden, deren
Aufgaben unterschiedlich und wie folgt festgelegt sind:
• Das Orakel R1 erält einen Schlüssel K und einen Klartext x und gibt zufällig
einen Chiffretext y zurück.
• Das Orakel R2 bekommt dagegen einen Schlüssel K und Chiffretext y und gibt
zufällig einen Klartext x zurück.
Ein Gegner A, der eine Blockchiffre-basierte Hashfunktion he angreifen will, wobei
e die verwendete Blockchiffre ist, hat den Zugang zu R1 und R2 , indem er sie auf
folgende Wiese befragt:
• Sendet A eine Anfrage (K, x) an R1 , so bekommt er ein y zurück.
• Stellt A dem Orakel R2 die Frage (K, y), so erhält er ein x.
Dieses Szenario geht davon aus, dass jede bereits gestellte Frage nicht mehr wiederholt
werden soll. Mit anderen Worten wird die Frage (K, x) mit einem y beantwortet, so
ist es nicht möglich, die Frage (K, y) zu stellen.
Die DC-Analyse wurde für alle 64 PGV-Konstruktionen durchgeführt. Es kam zu Beschluss, dass 20 Hashfunktionen sicher sind, welche die 12 sicheren PGV-Hashfunktionen
enthalten. Diese 20 Schemata, welche in der Tabelle 4.3 dargestellt werden, lassen sich
79
Kapitel 4 Blockchiffren-basierte Hashfunktionen
im Wesentlich in zwei verschiedenen Gruppen einteilen, welche mit G1 bzw. G2 bezeichnet werden und folgende sind:
G1 = {h1 , h2 , · · · , h12 } ,
G2 = {h13 , · · · , h20 } .
i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hi
ehi−1 (mi ) ⊕ mi
ehi−1 (wi ) ⊕ wi
ehi−1 (mi ) ⊕ wi
ehi−1 (wi ) ⊕ mi
emi (hi−1 ) ⊕ hi−1
emi (wi ) ⊕ wi
emi (hi−1 ) ⊕ wi
emi (wi ) ⊕ hi−1
ewi (mi ) ⊕ mi
ewi (hi−1 ) ⊕ hi−1
ewi (mi ) ⊕ hi−1
ewi (hi−1 ) ⊕ mi
ewi (mi )
ewi (mi ) ⊕ wi
emi (hi−1 )
ewi (hi−1 )
emi (hi−1 ) ⊕ mi
ewi (hi−1 ) ⊕ wi
emi (wi )
emi (wi ) ⊕ mi
Tabelle 4.3: Die 20 ICM-sichere PGV-Hashfunktionen.
Die Gruppe G1 entspricht genau der 12 sicheren Konstruktionen, welche sich aus der
PGV-Analyse [57] ergaben, während G2 die 8 zusätlichen nach DC-Analyse [10] kollisionsresistente Konstruktionen darstellen.
Diese zwei Gruppen wurden auf zwei unterschiedliche Weisen von BRS [10] analysiert.
Dabei basierten die Sicherheitsbeweisen für G1 auf dem Merkle-Damgaard Paradigma (Theorem 3.1), welches besagt, dass die Kollisionsresistenz jeder Kompressionsfunktion fi , ( 1 ≤ i ≤ 12) die Kollisionsresistenz der daraus entstehenden Hashfunktion hi , ( 1 ≤ i ≤ 12) impliziert. Bei G2 konnte das Merkle-Damgaard Paradigma
überhaupt nicht angewendet werden, weil die verwendten Kompressionsfunktionen die
80
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Kollisionsresistenz-Eigenschaft nicht aufweisen und deshalb wurden die Sicherheitsbeweisen graphenbasiert geführt. Mehere Details dazu finden sich in [10].
Bevor wir uns mit der DC-Analyse beschäftigen, wollen wir einige Begriffe und Defintionen der Graphentheorie einführen, die zum Verständnis dieses Abschnitt beitragen.
Definition 4.10 (Plain bzw.MD-Padding)
Sei m eine Nachricht, deren Bitlänge s beträgt mit s ≤ 2n/2 − 1. Seien p und p0 zwei
natürliche Zahlen mit folgenden Eigenschaften:
p + s + 1 = n/2 mod n,
p0 + s + 1 = 0 mod n,
wobei n die Hashwertlänge ist. Definieren wir zwei Arten von Paddingsvorgänge. Diese
werden Plain- bzw. MD-Padding genannt (bezeichnet mit Plain-Pad bzw. MD-Pad)
und sind folgende:
P lain − P ad = m||1||0(p) ,
0
M D − P ad = m||1||0(p ) ||BinL(m),
wobei 0(k) die Konkatenierung von k Nullen bezeichnet und BinL(m) für die binäre
Darstellung der Nachricht m steht.
Definition 4.11 (Digraph)
Ein Digraph (auch gerichteter Graph)(engl.directed graph) G = (VG , EG ) eine ist eine
nichtleere Menge VG von Knoten (engl. vertex ), einer eventuell leeren Menge EG von
gerichteten Kanten(engl. arc) und einer Inzidenzfunktion ψ : EG → VG × VG ,damit:
ψ(t) = (v, w) mit t ∈ EG und v, w ∈ VG (Schreibweise: t = (v, w) oder t = arc v → w ).
Definition 4.12 (Weg oder Pfad)
Sei G = (VG , EG ) ein Digraph. Eine Knotenfolge (v0 , v2 , · · · , vr ) mit (vi−1 , vi ) ∈ EG
für i = 1, · · · , r heisst Weg oder Pfad von v0 nach vr .
Definition 4.13 (Kreis)
Ein geschlossener Weg heißt auch Kreis (cycle), wenn er mindestens eine Kante enthält.
Definition 4.14 (Länge)
Die Länge des Weges P ist die Anzahl seiner Kanten.
81
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Definition 4.15 (zusammenhängend (connected))
Ein Digragh G heißt zusammenhängend (connected), wenn je zwei Knoten aus G verbunden sind.
Definition 4.16 (Unterdigraph)
Digraph G0 = (VG0 , EG0 ) heisst Untergraph von G = (VG , EG ) falls
VG0 ⊂ VG und EG0 ⊂ EG .
Definition 4.17 (Merkle-Damgård-Graph)
Sei h eine MD-Hashfunktion und f die zugrunde liegende Kompressionsfunktion mit
f : {0, 1}n × {0, 1}k −→ {0, 1}n
Ein Merkle-Damgaard-Graph ist ein Digraph G = (VG , EG ) mit
VG ⊆ {0, 1}n
und
EG = {(y 0 , x, y)} ⊆ {0, 1}n × {0, 1}k × {0, 1}n ,
wobei y 0 = f (y, x).
Bei der DC-Analyse wurde eine Angriffsmethode angewendet, die auf Graphenthoerie
basiert. Diese Methode benutzt den Algorithmus 5, welcher ein Blochchiffre-Orakel
simuliert und die folgende Menge verwendet.
• D(eK ) = {x|eK (x) nicht definiert} .
• D(eK ) = {0, 1}n \ D(eK ).
• R(eK ) = {eK (x) nicht definiert} .
• R(eK ) = {0, 1}n \ R(eK ).
Die Angriffsidee besteht darin, dass der Angreifer A einen Digraph erstellt, in dem
zwei Pfade enthalten sind, die sich in zwei Knoten schneiden. Das geschieht, indem er
parallel den Algorithmus 5 ausführt und einen Digraph GH aufzeichnet, wobei H für
eine beliebige Hashfunktion aus G1 ∪G2 steht. Der Digraph GH wird aus den Nachrichtenblöcke mi und den Zwischenergebnisse hi−1 und hi erzeugt. Diese Angriffsmethode
wird in [21] als Graph-Drawing-Attack bezeichnet und sieht folgendermassen aus:
82
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Algorithm 5 SimulateOracles(A, n)
1. Eingabe: Zwei Orakeln R1 und R2 sowie ein Angreifer A.
2. Initialisierung: i = 0, eK (x) = undef iniert , ∀ (K, x) ∈ {0, 1}n × {0, 1}n
3. Fall 1: Falls A eine Anfrage (K, y) an das Orakel R2 sendet:
3.1. i ← i + 1.
3.2. Ki ← K.
3.3. yi ← y.
$
3.4. yi ← R(eK )
3.5. eK (x) ← yi
3.6. Gebe yi dem A zurück
4. Fall 2: Falls A eine Anfrage (K, x) an das Orakel R1 sendet:
4.1. i ← i + 1.
4.2. Ki ← K.
4.3. xi ← x.
$
4.4. xi ← D(eK )
4.5. eK (xi ) ← y
4.6. Gebe xi dem A zurück
3. Ausgabe: Beendet A seine Anfragen, so werden alle (xj , Kj , yj ) ausgegeben.
83
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Zunächst führt der Angreifer den Algorithmus 5 aus, um eine Menge von Tripeln
(x, K, y) zu bekommen. Unter Benutzung dreier Funktionen gi , i = 1, 2, 3 berechnet
er für jedes (x, K, y) drei Werte gi (x, K, y), i = 1, 2, 3, mit dem Absicht, dass diese
Werte jeweils ein Knot eines Graphes GH bildden.
Diese Funktionen sind in Tabelle 4.4 explizit definiert und erfüllen die folgende Eigenschaften:
gi : {0, 1}n × {0, 1}k −→ {0, 1}n , i = 1, 2, 3.
Mit
g1 (x, K, y) = hi−1 ,
g2 (x, K, y) = mi ,
g3 (x, K, y) = hi ,
wobei hi = fi (hi−1 , mi ), i = 1, · · · , 20. Diese Gleichung ist äquivalent zu
g3 (x, K, y) = fi (g1 (x, K, y), g2 (x, K, y)), i = 1, · · · , 20.
Ist das Ziel erreicht, so erzeugt er einen zusammenhängenden Untergraph von GH ,
welcher zwei Pfäde beinhält, die dieselbe Anfangsknot bzw. Endknot haben.
Bezeichnen wir mit GiH = (VGiH , EGiH ) einen Digrah, den der Angreifer konstruiert
hat, indem die beide Orakeln insgesamt i mal gefragt wurden. Am Anfang wird GiH
mit G0H = IV initialisiert. Das heisst, G0H besteht aus einem einzigen Knot IV . Um
einen Digrah zu erstellen, wird den folgenden Algorithmus namens GraphDrawing
ausgeführt:
Wenn der Angreifer einen zusammenhängenden Unterdigraph G0H aus GH extrahiert,
dann kann er eine Kollision für H bilden. Eine Kollision für H besteht in diesem Fall
aus zwei Pfäde P1 und P2 , welche folgendermaßen definiert sind:
m
ml
m0
m0l
P1 = h0 →1 · · · →1 hl1 ,
P2 = h00 →1 · · · →2 h0l2 .
unter Voraussetzung
h0 = h00 und hl1 = h0l2 .
84
Kapitel 4 Blockchiffren-basierte Hashfunktionen
i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
g1
K
K
K
K
x
x⊕K
x
x⊕K
x⊕K
x
x⊕K
x
x⊕K
x⊕K
x
x
x
x
x⊕K
x⊕K
g2
x
x⊕K
x
x
K
K
K
x
x
x⊕K
x
x⊕K
x
x
K
x⊕K
K
x⊕K
K
K
g3
y⊕x
y⊕x
y⊕x
y⊕x⊕K
y⊕x
y⊕x
y⊕x⊕K
y⊕x⊕K
y⊕K
y⊕K
y⊕x⊕K
y⊕x⊕K
y
y⊕K
y
y
y⊕K
y⊕K
y
y⊕K
hi
ehi−1 (mi ) ⊕ mi
ehi−1 (wi ) ⊕ wi
ehi−1 (mi ) ⊕ mi
ehi−1 (wi ) ⊕ mi
emi (hi−1 ) ⊕ hi−1
emi (wi ) ⊕ wi
emi (hi−1 ) ⊕ wi
emi (wi ) ⊕ hi−1
ewi (mi ) ⊕ mi
ewi (hi−1 ) ⊕ hi−1
ewi (mi ) ⊕ hi−1
ewi (hi−1 ) ⊕ mi
ewi (mi )
ewi (mi ) ⊕ wi
emi (hi−1 )
ewi (hi−1 )
emi (hi−1 ) ⊕ mi
ewi (hi−1 ) ⊕ wi
emi (wi )
emi (wi ) ⊕ mi
Tabelle 4.4: Methoden zur Konstruktion von Knoten und Kanten eines Graphs.
Es ist zu beachten, dass kein MD-Padding in dieser Angriffsmethode durchgeführt
wurde. Wäre der Fall, so müssen die zwei erzeugten Pfäde die gleiche Länge haben.
Deswegen ist es wichtig zu betonen, dass das MD-Padding die Analyseergebnisse beeinflusst.
Im Folgenden beschäftigt sich die Sicherheitsanaylse zunächst mit der Kollisionsresistenz und danach mit (2nd ) Preimage-Resistenz von 20 Schemata, die in [10] als sicher
charakteresiert sind. Ausserdem werden hier nur die wichtige Theoreme gegeben, welche die Sicherheitskomplexität jeder Gruppe angeben.
Auf die theoretischen Beweise für diesen Theoreme werden wir verzichten. Wir geben
stattdessen nur Beweiskisszen. Die ausführliche Beweisen finden sich in [21].
4.3.2.2.1 Kollisionsresistenz In diesem Abschnitt werden wir uns mit der Kollisionsresistenz der 20 sicheren PGV-Schemata befassen und auf den Aufwand des Kollisionsangriffs eingehen, welcher auf der bereits vorgestellten Graph-Drawing-Methode
85
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Algorithm 6 GraphDrawing(A, n)
1. Eingabe: Zwei Orakeln R1 und R2 sowie ein Angreifer A.
2. Initialisierung: i = 0, eK (x) = nicht − def iniert , ∀ (K, x) ∈ {0, 1}n × {0, 1}n ,
GH = G0H .
3. Ausführung: Führe den Algoritmus 5 aus, dessen Ausgabe eine Menge von
Tupeln (xj , Kj , yj ) ist.
4. Erstellung eines Graphs:
4.1. VGiH ← VGi−1 ∪ {g1 (xi , Ki , yi ), g3 (xi , Ki , yi )}.
H
4.2. EGiH ← EGi−1 ∪ {g1 (xi , Ki , yi ), g2 (xi , Ki , yi ), g3 (xi , Ki , yi )}.
H
5. Ausgabe: Beendet A seine Anfragen, so werden alle (xj , Kj , yj ) und
den dazugehörigen Graph ausgegeben.
basiert. Die Komplexität dieses Angriffs hängt hauptsächlich von der Paddingsmethode ab, je nach dem, ob ein MD-Padding oder ein Plain-Padding durchgeführt wurde.
Theorem 4.1 (Oberschranke der Komplexität)
Sei H eine Hashfunktion, welche einen Hashwert der Länge n mit n ≥ 1 produziert.
Wird das Plain-Padding duchrgefürt, so gelten die folgenden Ungleichungen:
Koll
AdvH
(A) ≤ q(q + 1)/2n
für jede q ≥ 1 , H ∈ G1 ∪ G2 .
Beweisskizze: Die Beweisidee basiert auf dem Algorithmus 6) und ist folgende:
Sei A ein Angreifer, der eine Kollision für eine beliebige H ∈ G1 ∪ G2 finden möchte.
Zunächst führt er den Graph-Drawing-Algorithmus aus, mit G0H = {IV }. Angenommen, dass der Angreifer insgesamt q Fragen den Orakeln stellt, mit dem Ziel, einen
zusammenhängenden Unterdigraph Ug ⊂ GH zu bilden.
Betrachten wir das folgende Ereignis E
E = Es existiert ein solcher Unterdigraph mit dem Kreis C und dem Anfangsknot
”
IV “.
Ferner definieren noch ein weiteres Ereignis Ei mit
86
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Ei = Der Unterdigraph Ug lässt sich nach i-Anfrage erzeugt werden.“,
”
wobei E0 die Leermenge ist.
Also gilt
Pr [E] =
Pq
i=1
Pr Ei |Ei−1 ∧ · · · ∧ E0 .
Jedes Summenglied der rechten Seite besagt, dass der Underdigraph erst bei der i−ten
Anfrage erstellt werden kann. Das heisst, der Angriff war bis zur (i − 1) − ten Anfrage
gescheitert.
Zum Beweis des Theorems wurden zwei wichtige Behauptungen in [21] eingeführt, die
wir hier ohne Beweise annehmen.
1. Behauptung 1:
2. Behauptung 2:
AdvhKoll (A) ≤ Pr [E] .
Pr Ei |Ei−1 ∧ · · · ∧ E0 ≤
i
.
2n −i+1
Jetzt können wir den Beweis für das Theorem 4.1 vervollständigen. Es gilt also
AdvhKoll (A)
≤ Pr [E] =
q
X
Pr Ei |Ei−1 ∧ · · · ∧ E0
i=1
q
≤
X
i=1
q
≤
X
2n
i
−i+1
i = q(q + 1)/2n .
i=1
≤ q(q + 1)/2n .
Theorem 4.2 (Unterschranke der Komplexität)
Sei H eine Hashfunktion, welche einen Hashwert der Länge n mit n ≥ 1 produziert.
Wird ein Plain-Padding duchrgefürt, so gelten die folgenden Ungleichungen:
Koll
(A) ≥ q(q + 1)/2n+1
AdvH
für jede q ≥ 1 , H ∈ G1 ∪ G2 .
87
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Beweisskizze: Sei A ein Angreifer auf eine beliebige Hashfunktion H ∈ G1 ∪ G2 ,
mit dem Absicht, eine Kollision für dieses Hashfunktion zu finden. Zunächst führt
er den Graph-Drawing-Algorithmus aus, mit G0H = {IV }. Angenommen, dass A nur
Anfragen der Form (x, K) auswählt, mit dem Ziel, dass dem Wert g1 (x, K, ?) in GiH
enthalten ist.
Die Fragezeichen in g1 (x, K, ?) stellt die unbekannte Antwort y dar, bevor sie dem Angreifer zurückgeschickt wird. Also ist Digraph GH zusammenhängend und IV ∈ GH .
Analog zu vorhergendem Theorem, betrachten wir die folgenden Ereignisse
F = IV ∈ GH . und GH besitzt einen Kreis C“.
”
und
Fi = Der Kreis C wird nach nach i Anfragen erstellt“,
”
wobei F0 die Leermenge bezeichnet.
Also gilt:
Pr [F ] =
Pq
i=1
Pr Fi |Fi−1 ∧ · · · ∧ F0 .
Um die obige Ungleichung zu zeigen, benötigen wir zwei weitere Ungleichungen, deren
Beweisen in [21] gegeben sind.
1.
2.
Koll
(A) ≥ Pr [F ] .
AdvH
Pr Fi |Fi−1 ∧ · · · ∧ F0 ≥
(1)
i
.
2n
(2)
Aus (1) und (2) folgt
Koll
AdvH
(A) ≥ Pr [F ]
q
X
≥
Pr Fi |Fi−1 ∧ · · · ∧ F0
i=1
q
X
i
≥
2n
i=1
= q(q + 1)/2n+1 .
88
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Wenn das MD-Padding durchgeführt wird, dann erhalten wir die folgenden Ergebnisse,
die sich völlig zu vorherigen Ergebnisse unterscheiden.
Theorem 4.3 (Unterschranke bzw.Oberschranke der Kompexität)
Sei H eine Hashfunktion, welche einen Hashwert der Länge n mit n ≥ 1 erzeugt. Wird
ein MD-Padding duchrgefürt, so gelten die folgenden Ungleichungen:
Koll
q(q − 1)/2n ≤ AdvH
(A) ≤ q(q − 1)/2n+1 ,
q ≥ 1 , H ∈ G1 ∪ G2 .
4.3.2.2.2 Preimage-Resistenz Jedes Urbid kann als ein gerichteter Pfad aufgefasst
wird, welcher das Initialknot IV mit einem vorgegebenen Knot β in einem Digraph
GH vebindet. Im Gegensatz zu Kollisionsresistenz-Analyse ist der Komplexität eines Preimage-Angriffs mithilfe der Graph-Drawing-Methode artunabhängig von dem
Padding. Mit anderen Worten erhält man die gleichen Ergebnisse unabhängig davon,
ob ein Plain Padding oder MD-Pading durchgeführt wird. In Folgenden werden wir
Theoreme angeben, deren Beweise sich in [21] finden.
Theorem 4.4 (Preimage)
Seien n die Hashwertlänge und ein vorgegebenes Target β . Also es gilt:
1.
P re
(A) ≤ q/2n−1 ,
q/2n ≤ AdvH
2.
P re
q(q + 1)/2n+2 ≤ AdvH
(A) ≤ q(q + 1)/2n+1 ,
q ≥ 1 , H ∈ G1 .
q ≥ 1 , H ∈ G1 ∪ G2 .
Beweis : Siehe [21].
4.3.2.2.3 2nd -Preimage-Resistenz Hier werden die zwei Typen des Paddings
berüchsichtigt. In Abhängigkeit von diesen Arten kommen zwei verschieden Ergebnisse heraus, welche im Folgenden als zwei Theoreme ohne Beweise gegeben sind.
Theorem 4.5 (2nd -Preimage mit Plain Padding)
Seien n ≥ 1 der Hashwertlänge und H eine Hashfunktion H. Falls jede Nachricht aus
r Blöcke besteht und H(m, IV ) = β, wobei für ein vorgegebenes Target steht, Dann
gelten die folgenden Ungleichungen:
1.
sP re
(r + 1)q/2n ≤ AdvH
(A) ≤ (r + 1)q/2n−1 ,
2.
sP re
q(4r + q + 3)/2n+2 ≤ AdvH
(A) ≤ q(2r + q + 3)/2n ,
q ≥ 1 , H ∈ G1 .
q ≥ 1 , H ∈ G2 .
Beweis : Siehe [21].
Theorem 4.6 (2nd -Preimage mit MD-Padding)
Seien n ≥ 1 der Hashwertlänge und H eine Hashfunktion H. Falls jede Nachricht aus
89
Kapitel 4 Blockchiffren-basierte Hashfunktionen
r Blöcke besteht und H(m, IV ) = β, wobei für ein vorgegebenes Target steht, Dann
gelten die folgenden Ungleichungen:
sP re
1.
(r + 1)q/2n ≤ AdvH
(A) ≤ (r + 1)q/2n−1 , q ≥ 1 , H ∈ G1 .
sP re
2.
q(4r + q + 3)/2n+2 ≤ AdvH
(A) ≤ q(2r + q + 3)/2n , q ≥ 1 , H ∈ G2 .
Beweis : Siehe [21].
Zusammenfassung der Ergebnisse Alle Ergebnisse, die wir aus ICM-Analyse erhalten haben, sind tabellarisch nochmal vorgestellt :
Kollisionsresistenz
PGV-Gruppe Unterschranke Oberschranke
{h1 , · · · h20 } q(q + 1)/2n+1 q(q + 1)/2n
Tabelle 4.5: Die Kollisionsresistenz der 20 PGV-Konstruktionen.
Preimage-Resistenz
PGV-Gruppe Unterschranke Oberschranke
{h1 , · · · h12 }
q/2n
q/2n−1
{h13 , · · · h20 } q(q + 1)/2n+2 q(q + 1)/2n
Tabelle 4.6: Die Preimage-Resistenz der 20 PGV-Konstruktionen.
2nd -Preimage mit Plain
PGV-Gruppe
Unterschranke
{h1 , · · · h4 }
q(r + 1)/2n+2
{h5 , · · · h12 }
q(r + 1)/2n+2
{h13 , · · · h20 } q(q + 4r + 3)/2n+2
Padding
Oberschranke
q(r + 1)/2n
q(r + 1)/2n+1
q(q + 2r + 1)/2n
Tabelle 4.7: Die 2nd -Preimage-Resistenz der 20 PGV-Konstruktionen mit Plain-Pad.
2nd -Preimage mit MD-Padding
{h1 , · · · h4 }
q/2n
q/2n−1
n+2
{h5 , · · · h12 } q(r − 1)/2
q(r − 1)/2n
{h13 , · · · h20 } q(q + 2r)/2n+2 q(q + r)/2n
Tabelle 4.8: Die 2nd -Preimage-Resistenz der 20 PGV-Konstruktionen mit MD-Pad.
90
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Sicherheistniveaus der 20 sicheren Konstruktionen Um die Sicherheitsniveaus
der 20 sicheren Konstruktionen approximativ zu erhlaten, werden die Unterschranke
des Vorteils jedes Angriffs mit dem Wert 1/2 gleichgesetzt, und nach der Anzahl der
Anfragen q aufgelöst, unter Verwendung der Approximation q(q + s) ≈ q 2 , wobei
s ∈ {1, r, 2r, 2r + 1, 4r + 3} ist. Daraus ergeben sich die nachstehenden Ergebnisse:
Hashfunktion
{h1 , · · · h4 }
{h5 , · · · h12 }
{h13 , · · · h20 }
Kollision
2n/2
2n/2
2n/2
Preimage
2nd -Preimage
2n−1
2n /(r + 1) (Plain)
2n−1 (MD)
2n−1
2n /(r + 1) (Plain)
2n+1 /(r − 1) (MD)
2(n+1)/2
2(n+1)/2 (Plain)
2(n+1)/2 (MD)
Tabelle 4.9: Die Sicherheistniveaus der 20 sicheren PGV-Konstruktionen.
4.4 Double-Block-Length Konstruktionen
Als alternative Konstruktionen für die bekannten Hashfunktionen wie MD5 und SHA1 ist die Verwendung von Blockchiffren als Kompressionsfunktion. Ein großer Nachteil
bei diesen Konstruktionen liegt hauptsächlich darin, dass die Ausgabelänge im Allgemein beschränkt ist. Mit anderen Worten: Bei der Benutzung von Blockchiffren, die
zum Beispiel 128 Bit Outputlänge liefern, liegt die maximale Komplexität zum Finden
einer Kollision nur bei 264 Hashberechnungen. Eine mögliche und allgemeine Lösung,
die Beschränkung dieses Sicherheitsniveaus zu überwinden, ist die Verwendung von
einer Double Block-length-Hashfunktion (bezeichnet mit DBL), deren Ausgabelänge
(Hashlänge) doppelt so lang ist wie die Ausgabelänge der zugrunde liegenden Blockchiffre. Wenn beispielsweise das DES bzw. AES als Kompressionsfunktion verwendet
wird, dann erhält man nur einen 128 bzw. 256 Bit Hashwert; der Einsatz im Bereich
der digitalen Signaturen ist also nicht zu empfehlen. Im folgenden Abschnitt gehen wir
auf einige wichtige Konstruktionen von DBL-Hashfunktionen sowie ihre Sicherheit auf.
4.4.1 MDC-2 und MDC-4
Die MDC-2 und MDC-4 zählen zu den meist bekannten DBL-Hashfunktionen. Sie wurden von B.Brachtl und Coppersmith et al. [47, 11] entwickelt. Wie in der Abbildung
4.5 dargestellt wird, besteht die MDC-2 im Wesentlichen aus den zwei Anwendungen
der Matyas-Meyer-Oseas-Kompressionsfunktion und kann wie folgt beschrieben werden:
Zunächst wird die Nachricht in t Blöcke mi der Länge n eingeteilt. Ein Block geht zwei
mal und parallel als Klartext in die Blockchiffre ein. Die Grundidee der Hasherzeugung ist, dass zwei Zwischenergebnisse hi−1 und h0i−1 als Schlüsseln verwendet werden
91
Kapitel 4 Blockchiffren-basierte Hashfunktionen
, um zwei Hashwerte hi und h0i mit je n Bits zu berechnen, deren Konkatenation dem
endgültigen Hashwert nach der letzten Runde entspricht. Unter Verwendung zweier
Initialwerte h0 und h00 sieht der genaue Ablauf der Hashberechnung formal folgendermaßen aus:
Ti = ehi−1 (mi ) ⊕ mi = LTi ||RTi
Ti0 = eh0i−1 (mi ) ⊕ mi = LTi0 ||RTi0
hi = LTi ||RTi0
h0i = LTi0 ||RTi
Nach t Iterationen erhalten wir einen 2n-Bit-Hashwert MDC2 mit
M DC2 = ht ||h0t .
Abbildung 4.5: Die MDC-2 Kompressionsfunktion.
Wie die Abbildung 4.6 verdeudlich wird bei der MDC-4 Hashfunktion die MDC-2Kompressionsfunktion zweimal ausgeführt. Bei der zweiten Anwendung der MDC-2
92
Kapitel 4 Blockchiffren-basierte Hashfunktionen
werden die benötigten Schlüsseln aus den Ergebnissen (Hashwerte) der ersten MDC-2Ausführung abgeleitet. Die Klartexte entstehen aus den Ausgaben der vorhergehenden
MD4-Kompressionsfunktion, d.h eine MDC-4 Iteration kann als Verkettung von zwei
MDC-2 Runden angesehen werden. Formal beschrieben, verläuft die MDC-4 wie folgt:
Ti = ehi−1 (mi ) ⊕ mi = LTi ||RTi
Ti0 = eh0i−1 (mi ) ⊕ mi = LTi0 ||RTi0
Ui
Ui0
Vi
Vi0
hi
h0i
=
=
=
=
=
=
LTi ||RTi0
LTi0 ||RTi
eUi (h0i−1 ) ⊕ h0i−1 = LVi ||RVi
eUi0 (hi−1 ) ⊕ hi−1 = LVi0 ||RVi0
LVi ||RTi0
LVi0 ||RVi
und der MDC-4 Hashwert ist
M DC4 = ht ||h0t .
Wie man sieht, benötigen MDC-2 und MDC-4 zwei bzw. vier Aufrufe der Blockchiffre,
um einen Nachrichtenblock zu bearbeiten. Deshalb beträgt ihre Hash-Rate 1/2 bzw.
1/4. In [37] wurde gezeigt, dass die MDC-2 Kompressionsfunktion sicherlich nicht kollisionsresistent ist. Für die MDC-4 ist allerdings möglich Kollisionen zu finden, für dessen Auffinden lediglich 23n/4 Kompressionsfunktionsaufrufe statt 22n benötigt werden.
In Bezuf auf Preimage-Resistenz besitzen MDC-2 und MDC-4 eine Sicherheitsniveau
von 23n/4 bzw. 2n .
4.4.2 Parallel Davies-Meyer (Parallel-DM)
Das Parallele Davies-Meyer wurde auf der Kryptokonferenz 93 in [70] vorgeschlagen
mit dem Ziel, eine effiziente 2n-Bit-DBL-Hashfunktion vom Hash-Rate 1 aus einer
(n, n)-Bit-Blockchiffre zu realisieren. Zur Beschreibung allgemeiner Form solcher Konstruktionen werden die Nachrichtenblöcke mi und die Zwischenergebnisse hi jeweils in
zwei n-Bit-Strings zerlegt . Sie sind wie folgt definiert:
(1)
(2)
hi = hi ||hi
(1)
(2)
mi = mi ||mi ,
(j)
wobei jedes hi
(j)
bzw.mi
für j = 1, 2. eine Bitlänge n hat.
93
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Abbildung 4.6: Die MDC-4 Kompressionsfunktion.
Die allgemeine Struktur sieht dann folgendermaßen aus:
(1)
hi
= eA (B) ⊕ C
(2)
hi
= eR (S) ⊕ T
(j)
(j)
Dabei sind A, B, CR, S und T binäre Linearkombinationen von {hi , mi , j = 1, 2.}
Diese formale Struktur erzeugt eine Klasse von DBL-Hashfunktionen von Hash-Rate
1. Ein besonderer Spezielfall davon ist das Parallel-DM-Schema, welches in der Abbildung 4.7 dargestellt wird und die folgenden Parametern verwendet:
(1)
(2)
A = mi ⊕ mi
(1)
(1)
(1)
(1)
B = hi ⊕ mi
C = hi ⊕ mi
(1)
R = mi
(2)
(2)
(2)
(2)
S = hi ⊕ mi
T = hi ⊕ mi
94
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Abbildung 4.7: Die Parallel Davies-Meyer-Hashfunktion.
Eine weitere Instanz, die auch zu der obigen Klasse gehört, heißt LOKI DoubleHashfunktion. Diese Hashfunktion wurde von L. Brown, J. Pieprzyck, and J. Seberry
in [12] veröffentlicht. Es ist offensichtlich, dass diese Hashfunktionen eine gute Performance aufweisen. Trotzdem wurden diesen beiden Schemata im Jahr 1995 geknackt.
In [38] wurden tatsächlich zwei Angriffe auf das Parallel-DM vorgestellt und zwar ein
Kollisions- und Preimage-Angriff. Mit einer Wahrscheinlichkeit von 63 Prozent können
Kollisionen und Urbilder mit einem Aufwand von 3 · 2n bzw. 3 · 2n/2 gefunden werden. Für das LOKI-Schema benötigt das Auffinden von Kollisionen nach Knudsen,Lai
und Preneel [36] höchstens 23n/4 Hashberechnungen. Diese Autoren haben sogar gezeigt, dass das maximale Sicherheitsniveau in Bezug auf der Kollisionsresistenz für
irgendeine Konstruktion der obigen Klasse 23n/4 beträgt.
4.4.3 Yi-Lam-Hash
Diese Hashfunktion wurde in [78] von Yi und Lam vorgeschlagen. Sie verwendet eine (2n, n)-Blockchiffre-basierte Kompressionsfunktion und erzeugt einen 2n-Bit Hashwert. Um den Hashwert einer Nachricht m zu berechnen, wird m in t Blöcke mit je
n Blöcke gespalten. Im Gegensatz zu den vorherigen Schemas wird bei dieser Hashfunktion eine modulare Addition eingesetzt, mit dem Ziel, das Zustandekommen von
Kollisionen für die Kompressionsfunktion auszuschließen. Darüber hinaus wird bei jeder Iteration das vorhergehende Zwischenergebnis als Schlüssel verwendet.
95
Kapitel 4 Blockchiffren-basierte Hashfunktionen
(1)
(2)
Bezeichnen wir mit h0 und h0 zwei Initialwerte mit je n-Bits . Wie die Abbildung 4.8
verdeutlicht, sieht der Ablauf der Hashberechnung wie folgt aus:
(1)
(2)
ki = hi−1 ||hi−1
(1)
hi
= eki (mi ) ⊕ mi
(2)
hi
= (eki (mi ) ⊕ hi−1 )[+]hi−1
(2)
(1)
mod 2n ,
wobei die Operation [+] die modulare Addition darstellt. Der erzeugte Hashwert, der
wir mit YILAM bezeichnen, ist dann durch
(1)
(2)
Y ILAM = ht ||ht
Abbildung 4.8: Die Yi-Lam-Hashfunktion.
gegeben. Trotz der Vermutung, dass diese Konstruktion in [78] sicher [78] ist, wurde
später festgestellt, dass ihr Design anfällig gegen den so genannte Solving-One-HalfAngriff ist. Die Grundidee ist es, die obigen Gleichungen unter bestimmten Bedingungen möglichst getrennt zu lösen.
(1)
(2)
(1)
Zum Beispiel findet man ein Paar (hi−1 , hi−1 ), welches zu dem Zwischenergebnis hi
führt, so lässt sich der gesamte Angriff auf 2n-Bit Hashfunktion auf eine n-Bit Hashfunktion reduzieren. Basierend auf dieser Idee wurde in [42] gezeigt, dass Kollisionen
und Urbilder für die Yi-Lam-Hashfunktion mit wenigem Aufwand in Vergleich zu
Brute-Force-Angriffe gefunden werden können. Für eine Kollision sind nur 3 · 2n/2
statt 2n Hashberechnungen erforderlich. Für ein Preimage bzw. ein zweites Preimage
benötigt man hingegen 2n+1 bzw. 3 · 2n−1 Hashberechnungen.
Weitere Angriffe wurden im Jahr 2000 von David Wagner in [69] publiziert. Er zeigte,
wie die Pseudo-Kollisionen und daher auch vollständige Kollisionen ermittelt werden
können. Seine Angriffstrategie ist, das Design der Yi-Lam so zu vereinfachen, dass ein
Pseudo-Kollisionsangriff durchführbar ist. Um dies zu verwirklichen, wurde die modulare Addition durch die bitweise XOR-Operation ersetzt. Sind Pseudo-Kollisionen
bei vereinfachter Variante erzeugt, so können auch Pseudo-Kollisionen für die Yi-Lam
Hashfunktion und danach volle Kollisionen gefunden werden. Der Gesamtaufwand zum
Finden einer Kollision wurde lediglich auf 2(0.71·n) reduziert.
96
Kapitel 4 Blockchiffren-basierte Hashfunktionen
4.4.4 Nandi-Hash
Im Jahr 2005 schlug Nandi in [48] eine Reihe von DBL-Hashfunktionen vor. Sein
Ziel war, die Sicherheit von andere DBL-Konstruktionen wie Luks-Double Schema
[40, 41] und kaskadierten Hashfunktionen aufgrund des Joux-Multikollsionsangriffs
[32] zu erhöhen. Die Grundidee des Vorschlags besteht darin, kollisionsfreie DBLKonstruktionen unter bestimmten Umständen in Black-Box-Modell anhand von Permutationen zu entwerfen. Formal ausgedrückt: Liegen Permutationen p : {0, 1}N →
{0, 1}N und eine Kompressionsfunktion f : {0, 1}N → {0, 1}n mit N ≥ n + 1 vor, so
kann eine sichere 2n-DBL-Kompressionsfunktion F konstruiert werden, deren Form
folgendermaßen aussieht:
F (X) = f (X)||f (p(X)) , X ∈ {0, 1}N .
Basierend auf der vorhergehenden Idee entwickelte Nandi eine Menge von
DBL-Kompressionsfunktionen. Zu diesem Zweck führen einige Begriffe und Definitionen ein.
Definition 4.18 (simpel Permutation)
Sei p : {0, 1}m+n → {0, 1}m+n mit m ≥ n + 1 eine Permutation. P heißt simpel , falls
für alle X ∈ {0, 1}m+n , p(X) und p− (X) leicht zu berechnen sind, wobei p− für die
Inverse von p steht.
Betrachten wir also zwei simpele Permutationen p1 ,p2 und eine Kompressionsfunktion
f mit
f : {0, 1}m+n → {0, 1}n .
Weiterhin definieren wir die folgende DBL-Kompressionsfunktionf p1 ,p2 :
f p1 ,p2 (X) = f (p1 (X))||f (p2 (X)), X ∈ f : {0, 1}m+n .
Falls p1 = id ist, erhalten wir
f id,p (X) = f (X)||f (p(X)), X ∈ {0, 1}m+n .
Zur vereinfachung setzen wir f id,p = f p . Dann wird eine Klasse von DBLKompressionsfunktionen gebildet, die wir mit C bezeichnen.
C = {f p :
p beschreibt alle mögliche simpele Permuattionen.}
Wie bei Single-Block-Length definieren wir eine verallgemeinerte Hash-Rate wie folgt:
97
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Definition 4.19 (Hash-Rate)
Sei F eine Double-Length-Kompressionsfunktion, die auf der folgendenen Kompressionsfunktionen fi , i = 1, · · · k basiert mit
F : {0, 1}N → {0, 1}2n ,
fi : {0, 1}m+n → {0, 1}n , i = 1, · · · k.
wobei m für die Bitlänge eines Nachrichtenblocks steht.
−2n
. Dabei ist s die AufruWir definieren die Hash-Rate von F durch den Wert Nm·s
feanzahl aller fi mit i = 1, · · · k, welche Wir zur Berechnung von F (X), X ∈ {0, 1}N
brauchen.
Beispiele
1. Definiere die Funktion F = f1 ||f2 wie folgt:
fi : {0, 1}n+m → {0, 1}n , i = 1, 2.
F : {0, 1}2n+m → {0, 1}n .
F (x1 , x2 , x3 ) = f1 (x1 , x3 )||f2 (x2 , x3 ), wobei |x1 | = |x2 | = n und |x3 | = m. Die
= 12 .
Hash-Rate von F ist gleich 2n+m−n
m·2
2. Sei F (X) = f1 (X)||f2 (X) definiert von {0, 1}n+m nach {0, 1}n . Die Hash-Rate
n
von F ist gleich n+m−2n
= 21 − 2m
. Falls m = 2n dann ist die Hash-Rate 12 .
m·2
3. Die Hash-Rate aller obigen definierten Kompressionsfunktionen f p beträgt auch
1
n
− 2m
.
2
Definition 4.20 (Fixpunkt)
Ein X heißt ein Fixpunkt von einer Permutation p, falls p(X) = X gilt.
Bezeichnen wir im Folgenden Fp als die Menge aller Fixpunkte von p.
Definition 4.21 (gute Permutation (good Permutation))
Sei p eine Permutation auf {0, 1}n+m mit m ≥ n + 1. Definieren wir die Menge
Fp [2n] = z ∈ {0, 1}2n : ∃ m ∈ {0, 1}m−n so dass z||m ∈ Fp .
Eine Permutation p heißt eine gute Permutaion, falls |Fp [2n]| << 2n erfüllt ist.
Betrachten wir eine gute Permutation p und eine Kompressionsfunktion f mit folgenden Eigenschaften
98
Kapitel 4 Blockchiffren-basierte Hashfunktionen
f : {0, 1}n+k → {0, 1}n ,
p : {0, 1}n+k → {0, 1}n+k .
wobei k ≥ n + 1. Nehmen wir eine Nachricht m, die in t Blöcke mi mit je (k − n) Bits
zerlegt wird. Bezeichnen wir mit f p die aus p entstehende DBL-Kompressionsfunktion
f p . Die Hashberechnung der Nachricht verläuft wie folgt:
f p : {0, 1}n+k → {0, 1}2n ,
h0 = IV als Initialwert.
hi = f p (hi−1 , mi )
= f (hi−1 , mi )||f (p(hi−1 , mi )), i = 1, · · · t.
Der endgültige Hashwert lautet dann ht .
In [48] wurde gezeigt: Ist die Funktion f als Zufallsorakel modelliert und p eine gute
Permutation, so wird aus jeder Kompressionsfunktion f p eine sichere Hashfunktion
erzeugt, deren Komplexität zum Finden einer Kollision O(2n ) beträgt .
Bemerkung 4.4
1 - Die Double-Wipe-Konstruktion von Luks [40, 41] ist nur eine Instanz der Klasse C
unter Verwendung der folgenden Permutation
p(x, y, z) = y||x||z,
wobei |x| = |y| = n bzw. |z| = m. Die Parameter x und y bzw. z stellen die Zwichenergebnisse bzw. die Nachrichtenblöcke dar.
2 - Neben dem oben beschriebenen Schema stellte Nandi in [49] zwei weitere Konstruktionen vor, deren Hash-Rate 1/3 bzw. 2/3 betragen. Die beiden Schemata basieren auf
so genannte unabhängige Funktionen, welche wie folgt definiert sind:
Definition 4.22 ( Unabhängige Funktion ( Independent Function ))
Eine Familie von Funktionen f1 , f2 · · · fs : D → R heißt unabhängig, falls
∀ {x11 , · · · , xiki } ⊂ D, i = 1, · · · s die Vektoren (fi (xi1 ), · · · , (fi (xiki ))), i = 1, · · · s unabhängig verteilt sind.
99
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Nun beschreiben diese zwei Konstruktionen. Die erste DBL-Konstruktion, deren HashRate gleich 1/3 ist, verwendet drei unabhängige Kompressionsfunktionen f1 , f2 , f3 :
{0, 1}2n → {0, 1}2 , um eine DBL-Kompressionsfunktion F zu konstruieren. Diese ist
durch
F (x, y, z) = (f1 (x, y) ⊕ f2 (y, z))||(f2 (y, z) ⊕ f3 (z, x)).
gegeben, mit |x| = |y| = |z| = n. Wie die Abbilddung 4.9 zeigt, kann dieses Schema
trotz ihrer Hash-Rate parallel implementiert werden.
In Bezug auf ihrer Sicherheit vermutete Nandi [49], dass die Komplexität diese Konstruktion im Zufallsorakel-Modell bezüglich der free-start-Kollisionsresistenz8 Ω(22n/3 )
beträgt. Diese Behauptung wurde später in [53] widelegt.Es wurde gezeigt, dass sich
die Komplexität auf Ø(2n/2 ) reduziert, falls die drei verwendete Kompressionsfunktionen durch Blockchiffren ersetzt werden.
Bei der zweiten Konstruktion werden auch drei unabhängige Funktion eingesetzt,die
jeweils im Vergleich zu den obigen Konstruktion drei Parameter übernehmen. Dieses
Schema, dessen Hash-Rate 3/4 beträgt, hat eine höhere Sicherheit im Ideal-Cipher Modell gegen Kollisionsangriffe. Dabei ist die Komplexität Ø(22n/3 ). Schließlich wurde in
[53] festgestellt, dass diese Komplexität nur bei Ø(2n/2 ) liegt, wenn die drei zugrunde
liegenden Kompressionsfunktionen als reale Blockchiffren betrachtet werden.
Abbildung 4.9: Die 1/3-Rate Nandi-Hashfunktion.
4.4.5 Hirose-Hash
Bei der Konstruktion von Hirose [30, 29] ging es hauptsächlich um eine Fortsetzung
der oben besprochenen Grundidee von Nandi [48]. Dabei wurde erklärt, wie man ei8
Eine Hasfunktion f ist free-start-Kollisionsresistent falls, zu gegebenen h0 und m ist es schwierig
eine andere Nachricht m0 mit m0 6= m, so dass gilt :f (h0 , m) = f (h0 , m0 ).
100
Kapitel 4 Blockchiffren-basierte Hashfunktionen
ne DBL-Hashfunktion anhand eines kleinen Bauteiles realisieren kann. Genau wie bei
dem Nandi-Schema werden Permutationen und eine n-Bit-Kompressionsfunktion eingesetzt, die bestimmte Eigenschaften erfüllen sollen. Diese Konstruktion wurde auf
zwei Arten aufgestellt, je nach dem zugrunde liegenden Sicherheitsmodell. Zunächst
im Zufallsorakel-Modell und danach im Ideal-Block-Cipher-Modell. In beiden Modellen haben die Ergebnisse der Sicherheitsanalyse gezeigt, dass die Konstruktion eine
signifikante Kollisionsresistenz besitzt. Im Folgenden werden wir zunächst das HiroseSchema in den beiden Sicherheistmodelle vorstellen und danach uns jeweils mit dem
Sicherheitsaspekt beschäftigen.
4.4.5.1 ROM-Konstruktion
In diesem Abschnitt betrachten wir die DBL-Hashfunktionen, deren zugrunde liegenden Kompressionsfunktionen wie folgt definiert sind:
F : {0, 1}2n × {0, 1}b → {0, 1}2n ,
mit F = (F1 , F2 ), wobei
Fi : {0, 1}2n × {0, 1}b → {0, 1}n ,
i = 1, 2.
Zum Hashen einer Nachricht m, wird sie zunächst in k Blöcke mi mit je b Bits gespalten
und danach durch die Kompressionsfunktion F folgendermaßen bearbeitet :
Seien gi und hi die zwei n-Bit Zwischenergebnisse, deren Konkatenation den Hashwert
in der i-ten Iteration bilden. Um die nächsten Hashwerte gi+1 und hi+1 zu erzeugen,
werden die folgende Operationen unter Verwendung einer Permutation p und eine
n-Bit Kompressionsfunktion parallel durchgeführt:
gi+1 = F1 (gi , hi , mi+1 ) = f (gi , hi , mi+1 )
hi+1 = F2 (gi , hi , mi+1 ) = f (p(gi , hi , mi+1 )),
wobei p und f die nachstehende Eigenschaften besitzen:
f : {0, 1}2n × {0, 1}b → {0, 1}n .
p : {0, 1}2n × {0, 1}b → {0, 1}n × {0, 1}b
mit
101
Kapitel 4 Blockchiffren-basierte Hashfunktionen
• Dief ist eine zufällig unabhängige Funktion.
• ∀ x ∈ {0, 1}2n+b , p(x) und p− (x) sind leicht zu berechnen.
• ∀ x ∈ {0, 1}2n+b , p(p(x)) = x. D.h, alle x sind Fixpunkte der Permutation p2 .
• ∀ x ∈ {0, 1}2n+b , p(x) 6= x. D.h, p besitzt keinen einzigen Fixpunkt.
Nach der k-ten Iteration wird der endgültige 2n-Bit Hashwert (bezeichnet mit H)
erzeugt
H = gk ||hk .
Nachdem wir den Ablauf der Hasberechnung vorgestellt haben, wollen uns mit der
Sicherheitsanalyse dieser Konstruktion befassen. Zu diesem Zweck werden zwei Annahmen aufgestellt. Erstens wird die Funktion f als Zufallsorakel betrachtet. Zweitens
werden die Anfragen x und p(x) zur selben Zeit an das Orakel gesendet, um den Wert
F (x) zu produzieren.
Eine Kollision für F sind zwei Nachrichten x, y mit x 6= y, so dass F (x) = F (y). Die
Definition von F lautet
F (x) = f (x)||f (p(x)), ∀x.
Daraus folgt
F (x) = F (y) ⇔ f (x)||f (p(x)) = f (y)||f (p(y)).
⇔ f (x) = f (y) und f (p(x)) = f (p(y))
Das impliziert, dass die Mengen {x, y} und {p(x), p(y)} Kollision für f erzeugen.
Daraus ergibt sich die folgende Fallunterscheidung:
1. Falls {x, y} = {p(x), p(y)} :
folgt daraus
Da die Permutation p keine Fixpunkte besitzt,
y = p(x) und x = p(y) mit x 6= y.
Solches Paar heißt ein zusammengehöriges Paar (matching-Paar) für F , sonst
nicht-zusammengehöriges Paar (non-matching-Paar). In diesem Fall sollen x und
P (x) eine Kollision für F bilden.
102
Kapitel 4 Blockchiffren-basierte Hashfunktionen
2. Falls {x, y} =
6 {p(x), p(y)} : In diesem Fall muss gelten
y 6= p(x) und x 6= p(y) mit x 6= y.
Sonst y = p(x) oder x = p(y). Nehmen wir an, y = p(x). Wegen p2 = id, muss
also gelten x = p(y) , und damit sind wir wieder im ersten Fall gelandet.
Aus dieser Diskussion können wir feststellen, dass sich das Zustandekommen einer
Kollision für F auf der soeben besprochenen Ereignisse reduziert.
Den Begriff des zusammengehöriges Paares brauchen wir für die Beweisskizze des folgenden Theorems, welche die Oberschranke der Komplexität angibt, um eine Kollision
für F zu finden.
Theorem 4.7 (Kollisionsresistenz)
Seien F die bereits definierte DBL-Kompressionsfunktion und H die daraus basierte
Koll
Hashfunktion. Ausserdem bezeichnen wir mit AdvH
(A) die Erfolgswahrscheinlichkeit, dass ein Angreifer A eine Kollision für H findet. Falls der Angreifer A insgesamt
q Anfragen an das Zufallsorakel F gesendet hat, dann gilt
Koll
AdvH
(A) ≤
q
q(q + 1)
+ n.
2n
2
2
Beweisidee : Betrachten wir das folgende Ereignis E
E := (F (x) = F (y) ∈ {0, 1}2n : x, y ∈ {0, 1}2n+b mitx 6= y
Da jede Kollision (x, y) für F zu einem der obigen Fälle führt, folgt daraus
E := E1 ∨ E2
wobei
E1 = {F (x) = F (y) | y 6= p(x)}
= {f (x) = f (y)} ∧ {f (p(y)) = f (p(x))}
und
E2 = {F (x) = F (y) | y = p(x)}
= {f (x) = f (y)} ∧ {f (x) = f (p(x))}
103
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Das Symbol | stellt das bedingte Wahrscheinlichkeitszeichen dar. Die Menge E1 (bzw.
E2 ) beschreibt das Ereignis, bei welchem ein nicht-zusammengehöriges
(bzw.zusammengehöriges) Paar (x, y) eine Kollision erzeugt, wenn genau eine einzige
Frage dem Orakel gestellt wurde.
Da die Funktion f zufällig unabhängig ist, erhalten wir die folgende Ergebnisse
Pr(E1 ) = Pr[{f (x) = f (y)} ∧ {f (p(y)) = f (p(x))}] =
Pr(E2 ) = Pr[{f (x) = f (y)} ∧ {f (x) = f (p(x))}] =
1 1
·
2n 2n
1
2n
Jetzt verallgemeinern wir dieses Ergebnis. Wenn der Angreifer insgesamt q verschiedene Paare (x, y) an das Orakel F geschickt hat, dann ergeben sich andere Wahrscheinlichkeiten für die soeben beschriebene Ereignisse und zwar
q q
Pr(E1 ) = Pr[{f (x) = f (y)} ∧ {f (p(y)) = f (p(x))}] = n · n
2 2
q
Pr(E2 ) = Pr[{f (x) = f (y)} ∧ {f (x) = f (p(x))}] = n
2
Somit ist
Koll
AdvH
(A)
q 2
q q
q
q
≤ n · n + n = n + n.
2 2
2
2
2
Um eine bessere Oberschranke dieser Komplexität zu erlangen, wurde in [30] eine
Instanz dieser Konstruktion vorgeschlagen. Dabei wurde die Permutation p durch eine Konkatenation zweier unabhängigen Funktionen p1 und p2 ersetzt, die wie folgt
festgelegt sind:
p1 : {0, 1}2n → {0, 1}2n ,
p2 : {0, 1}b → {0, 1}b ,
mit p(x, y, z) = (p1 (x, y), p2 (z)). Ausserdem wurde vorausgesetzt, dass p1 keine Fixpunkte in der Menge {0, 1}2n hat, d.h
p1 (x, y) 6= (x, y) , ∀ (x, y) ∈ {0, 1}2n × {0, 1}2n .
104
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Als Beispiele für solche Permutation p sind
• p(x, y, z) = (x⊕K, y, z), wobei K ein von Null verschiedenes Element aus {0, 1}n
ist.
• p(x, y, z) = (x ⊕ K1 , y ⊕ K2 , z ⊕ K3 ), wobei K1 , K2 ∈ {0, 1}n mit K1 6= K2 und
K3 ∈ {0, 1}b Konstanten sind.
2
In [30] wurde bewiesen, dass die gesamte Komplexität kleiner gleich 3· 2qn ist, analog
zu dem vorhergehenden Beweis. Die Beweisidee basiert auf der folgenden Mengeninklusion:
E2 = {F (x) = F (y)} ∧ {y = p(x)} ⊆ {F (w0 ) = p1 (F (w))} ∧ {w0 6= p(w)}
wobei (w, w0 ) eine nicht-zusammengehöriges Paar für F darstellt. Da p1 unabhängig
ist, ergibt sich
2
1
0
0
Pr[{F (w ) = p1 (F (w))} ∧ {w 6= p(w)}] =
2n
Dies führt zu
Pr(E2 ) ≤
1
2n
2
Werden insgesamt q Anfragenspaare dem Orakel F gestellt, so erhalten wir
q 2
Pr(E2 ) ≤
2n
und somit ist die gesamte Komplexität
q 2
q 2
q 2
Koll
AdvH (A) ≤
+2· n =3· n .
2n
2
2
Dieses Ergebnis ist im Vergleich zu der vorhergehenden Oberschranke sehr signifikant.
Beispielsweise für n = 128 und q = 280 bekommen wir für die
• Konstruktion 1 :
Koll
AdvH
(A)
q 2
q
≤
+ n ≈ 2−48
n
2
2
105
Kapitel 4 Blockchiffren-basierte Hashfunktionen
• Konstruktion 2 :
Koll
AdvH
(A) ≤ 3 ·
q 2
≈ 2−94
2n
4.4.5.2 ICM-Konstruktion
Bei dieser Konstruktion wurde die Kompressionsfunktion F durch eine konkrete (n, n+
b)-Bit-Blockchiffre ersetzt. Diese ist bei der (i + 1)-Iteration wie folgt definiert :
gi+1 = ehi ||mi+1 (hi ) ⊕ hi
hi+1 = ehi ||mi+1 (hi ⊕ K) ⊕ hi ⊕ K
wobei das Symbol || für das Konkatenierungszeichen steht. K ist eine von Null verschiedene Konstante aus {0, 1}n .
Zur Verabeitung eines Nachrichtenblocks benötigt die Kompressionsfunktion F zwei
Aufrufe der eingesetzten Blochchiffre e. Für diese zwei Aufrufe wird eine einzige Keyschelding-Phase gebraucht. Also die Hash-Rate beträgt (k − n)/2n, wobei die k die
Bitlänge des Schlüssels ist und n die Ausgabelänge von e.
Für reale Blockchiffre wie AES192 (k = 192, n = 128, b = 64) bzw. AES256 (k =
256, n = 128, b = 64) erhalten wir die Hash-Rate 1/4 bzw. 1/2. Was die Sicherheit dieses Hashalgorithmus betrifft, so wurde in [30] bewiesen, dass die Erfolgswahrscheinlich2
q
keit zum Finden einer Kollision im Ideal-Block-Cipher-Modell kleiner gleich 3 · 2n−1
ist. Formal heißt dies
q 2
Koll
AdvH
(A) ≤ = 3 · n−1 .
2
106
Kapitel 4 Blockchiffren-basierte Hashfunktionen
Abbildung 4.10: Die Double-Length Hashfunktion von Hirose.
107
Kapitel 5
Zusammenfassung
5.1 Zusammenfassung
Kryptographische Hashfunktionen werden in Zukunft immer eine bedeutendere Rolle
spielen, da sie im digitalen IT-Bereich nicht mehr wegzudenken sind. Fast alle zur Zeit
in der Praxis eingesetzten Hashfunktionen wie MD5 und SHA-1 sind nach dem MerkleDamgård Designprinzip [16, 46, 45] konstruiert, welches im Kapitel 3 vorgestellt wird.
Dieses Prinzip besteht darin, kollisionsresistente Hashfunktionen aus kollisionsresistenten Kompressionsfunktionen zu realisieren. In den letzten drei Jahren wurden bei
der Analyse dieses Designs bedeutende neue Erkenntnisse aufgedeckt. Die Ergebnisse haben gezeigt, dass dieses Design sich für die Hashfunktionen als mangelhaft und
empfindlich erwiesen hatte. Aus diesem Grund wurden eine Reihe von Varianten und
Erweiterungen der Merkle-Damgård Konstruktion vorgestellt, die einen Sicherheitsgewinn für Merkle-Damgård Hashfunktion gegen alle möglichen Angriffe bieten, unter
anderem der Joux-MultiKollisionsangriff (Abs. 3.4.2). Einige von diesen Varianten und
Vorschläge werden auch im Kapitel 3 (Abs 3.5) vorgestellt und beschrieben. Die Frage, ob diese Designideen später als Erstaz für die Merkle-Damgård Design gelten oder
ob man auf die ganze Merkle-Damgård Konstruktion verzichten sollte, ist also längst
nicht beantwortet.
Als eine alternative Konstruktion bietet sich die Kaskadierung verschiedener Hashfunktionen, um mehr Sicherheit durch das Zusammensetzen der dazugehörigen Hashwertlänge zu erreichen. Beispielsweise die SHA-1 zusammen mit SHA-224, um einen
Hashwert der Länge 416 Bit zu erzeugen. Aufgrund der möglichen Durchführung des
Joux-Multikollisionsagriffs [32] erzielt diese Konstruktion lediglich einen geringen Sicherheitsgewinn als erwartet, wenn die verwendeten Hashfunktionen nach dem MDDesign gebaut sind. Dies zeigt, dass ein längerer Hashwert nicht unbedingt mehr Sicherheit bedeutet.
Eine wichtige Anwendung des Merkle-Damgård-Prinzips im Bereich der symmetrischen Kryptographie ist die Erzeugung von Hashfunktionen aus Blockchiffren. Dabei
108
Kapitel 5 Zusammenfassung
wird die Kompressionsfunktion durch eine abstrakte Blockchiffre ersetzt. Eine besondere Familie von solchen Hashfunktionen geht auf Preneel, Govaets und Vandewalle
zurück, welche zu den Single-Length Konstruktionen gehört. Dabei ist der zu erzeugende Hashwert genauso gross wie die Blocklänge der benutzten Blockchiffre. Die
PGV-Familie umfasst insgesamt 64 Schemata. Unabhängig von der Sicherheitsmodelle wird gezeigt, dass nur 20 von denen als beweisbar sicher“ angesehen sind. Die Si”
cherheitsanalyse wird sowohl im Black-Box-Modell als auch im Block-Cipher-Modell
durchgeführt; d.h die verwendete Blockchiffre wird als eine idealisierte Blockchiffre
betrachtet. An dieser Stelle erhebt sich jedoch die Frage, ob diese Sicherheit dieser
Konstruktionen in der Praxis sichergestellt wird, wenn die gebräuchlichen Blockchiffren wie AES zum Einsatz kommen. Bisher ist die Antwort nicht klar, weil die realen
Blockchiffren häufig Schwächen aufweisen. Hat man eine bestimmte Schwachstelle entdeckt, so kann man davon ausgehen, dass weitere Schwachstellen existieren.
Da die meisten Single-Length Hashfunktionen in der Praxis Blochchiffren beschränkter
Blocklänge verwenden, also maximal 256 Bit mit AES256 , ist es wegen dem Moore
”
Gesetz“ notwendig, die Sicherheit von solchen Hashfunktionen in Zukunft gegen neuen
Angriffe [32, 77, 73] zu erhöhen, indem die zu erzeugende Hashlänge verdoppelt wird.
Eine kryptographisch robuste Methode, um dieses Ziel zu erreichen, ist der Einsatz von
Double-Length Hasfunktionen, welche in Kapitel 4 Abschnitt 4.4 behandelt werden.
Dabei verläuft die Hashberechnung parallel unter Verwendung zweier oder mehrerer
verschiedener Kompressionsfunktionen, deren Hashwerte gleich lang sind und die den
engültigen Hashwert der gesamten Hashfunktion durch die Konkatenation erzeugen.
Diese Hashfunktionen bieten im theoritischen Sinne eine höhere Sicherheit im IdealBlock-Cipher. Dennoch werden diese in der Praxis selten eingesetzt nicht aber die
kürzlich veröffentlichten Hashfunktion wie etwa die Hirose-Hashfunktion.
5.2 Ausblick
Aufgrund der erstaunlichen Ergebnisse bezüglich Unsicherheit von Hasfunktionen [32,
77, 73] muss in diesem Gebiet viel Arbeit reingesteckt werden. Die öffentliche kryptographische Gemeinschaft muss sich mehr mit dem Thema der Hashfunktionen befassen
und Wissen aneigenen, um bessere Designkriterien zu ermitteln.
Eine sachliche Diskussion über weitere Entwicklunsgstrategien von Hashfunktionen
wurde auf dem zweiten Cryptographic Hash Workshop 2006 geführt. Dabei wurden
unter anderem folgende Fragen hervorgehoben:
• Welche Eigenschaften sollten zukunftige Hashfunktionen besitzen, damit sie langfristig halten ?. Unter anderem robust und resistent gegen Kollisionsangriffe.
• Soll man Allzweck-Hasfunktionen entwickeln oder lieber meherer Hashfunktionen, die nur für einen bestimmten Zweck geeignet sind?. Man kann sich über
109
Kapitel 5 Zusammenfassung
diese Frage streiten.
• Soll man komplett neue Algorithmen entwickeln oder die bisher bekannten modifizieren ?. Die bisher bekannte Algorithmen sind fehlerhaft, aber man ist der
Auffassung, dass es keine Alternativen dazu gibt, welche mehr Sicherheit bieten.
Deshalb wird empfohlen, die bereits verwendeten Hashfunktionen zu modifizieren oder zu verstärkten Versionen wie SHA-2 Familie zu wechseln.
• Gibt es ein Kompromiss zwischen Sicherheit und Effizienz ?. Das ist ein Optimierungsproblem. Tatsache ist, dass bisher kein Algorithmus existiert, das gleichzeitig maximale Effizienz und maximale Sicherheit bietet. Ein Vorschlag wurde von
Shamir und Rivest eingereicht: Um weder die Effizienz noch die Sicherheit zu beeinträchtigen, soll die Rundeanzahl der Hashfunktionen paramatrisiert werden.
Die eingereichten Vorschläge erwecken unser Interesse, die Forschung in den nächsten
Jahren zu verfolgen.
110
Anhang A
Anhang
A.1 Grundlagen der Wahrscheinlichkeitstheorie
Der Ergebnisraum
Der Ergebnisraum ist die Menge, welche alle möglichen Ergebnisse eines Zufallsexperiments umfasst. Dieser Raum wird häufig mit dem Buchstaben Ω bezeichnet und kann
endlich (auch diskret) und unendlich sein. Im diskreten Fall besteht der Ergebnisraum
aus abzählbaren Ergebnissen, welche häufig als w1 , w2 , · · · , wn bezeichnet werden.
Der Ereignisraum
Jede Teilmenge eines Ergebnisraumes Ω werden Ereignisse genannt. Der Ereignisraum
ist die Menge aller mögliche Ergebnisse.
Jedes Ereignis bestehend aus einem einzigen Element der Form {w} heißt ein Elementarereignis.
Man sagt, dass ein Ereignis E eintritt, wenn ein Ergebnis w ∈ Ω existiert, welche in
E enthalten ist.
Die Menge A = Ω bzw. A = ∅ wird das leere Ereignis bzw. das sichere Ereignis
gennant.
Liegen E1 und E2 zwei Ereignisse vor, so können daraus andere Ereignisse durch mathematischen Verknüpfungen erzeugt werden, deren Bedeutung und Schreibeweise in
der folgenden Tabelle dargestellt wird:
Ausdruck
E1 ∩ E2 oder E1 ∧ E2
E1 ∪ E2 oder E1 ∨ E2
E1
Bedeutung
E1 und E2 tretten gleichzeitig ein.
E1 oder auch E2 eintritt
E1 tritt nicht ein.
111
Anhang A Anhang
Das Wahrscheinlichkeitsmaß
Gegeben seien ein Ergebnisraum Ω und ein Ereignisraum E. Das Wahrscheinlichkeitsmaß oder die Wahrscheinlichkeitsfunktion ist eine Funktion Pr : E ∈ E → Pr(E) ∈ R
mit folgenden Eigeschaften:
1. ∀ E ∈ E, 0 ≤ Pr(E) ≤ 1.
2. Pr(∅) = 0, Pr(Ω) = 1.
3. ∀ E1 , E2 ∈ E mit E1 ∧ E2 = ∅ ⇒ Pr(E1 ∨ E2 ) = Pr(E1 ) + Pr(E2 )
Die Ereignisse, welche die letzte Eigenschaft erfüllen, werden als disjunkte Ereignisse
bezeichnet.
Der Wahrscheinlichheitsraum
Ein Wahrscheinlichkeitsraum besteht aus einem Tripel (Ω, E, Pr) mit
• Ω ein Ergebnisraum
• E ein Ereignisraum über Ω
• Pr ein Wahrscheinlichkeitsmaß auf E
Laplace-Experimente
Sind alle Ergebnisse w ∈ Ω gleichwahrscheinlich, so wird Pr als Gleichverteilung auf Ω
und der Wahrscheinlichheitsraum (Ω, E, Pr) als laplacesch bezeichnet. In diesem Fall
gilt
Pr(E) =
|E|
,
|Ω|
∀E ∈ E,
wobei die Schreibeweise |E| für die Anzahl der Elemente von E steht.
Bedingte Wahrscheinlichkeiten
Sind E1 und E2 zwei Ereignisse mit Pr(E2 ) > 0, dann ist de bedingte Wahrscheinlichkeit von E1 unter der Bedingung E2 definiert durch
Pr(E1 |E2 ) =
112
| Pr(E1 ∧E2 )|
| Pr(E2 )|
Anhang A Anhang
Unabhängigkeit von Ereignissen
Zwei Ereignisse E1 und E2 sind (stochastich ) unabhängig, wenn
Pr(E1 |E2 ) = Pr(E1 ) bzw. Pr(E2 |E1 ) = Pr(E2 ).
In diesem Fall gilt
Pr(E1 ∧ E2 ) = Pr(E1 ) · Pr(E2 ).
Zufallsvariablen
In Zufallsexperimenten können die Ergebnisse wi des Ergebnissraumes Ω beispielsweise Buchstaben sein, mit welchen man nicht numerisch rechnen kann. Zur Bewertung
dieser Ergebnisse wird eine Abbildung benötigt, welche diesen Ergebnisse reellen Zahlen zuordnet. Diese Abbildung X : Ω ∈ w → X(w) = x ∈ R heißt eine Zufallsvariable
oder eine Zufallsgröße auf (Ω, E, Pr).
Eine Zufallsvariable heisst diskret, wenn die Teilmenge {X(w) : w ∈ Ω} eine endliche
Teilmenge von R ist.
Jede diskrete Zufallsvariable X auf (Ω, E, Pr) besitzt die sogenannte Wahrscheinlichkeitsverteilung, welche wie folgt definiert ist:
PrX : R ∈ x → PrX (x) = Pr({w ∈ Ω : X(w) = x}) ∈ [0, 1]
Der Wert PrX (x) wird häufig als Pr(X = x) geschrieben.
Sind X und Y zwei diskrete Zufallsvariablen eine diskrete, so wird die Funktion
PrX,Y : R2 ∈ (x, y) → PrX,Y (x, y) = Pr({w ∈ Ω : X(w) = x ∧ Y (w) = y}) ∈ [0, 1]
die gemeinsame Wahrscheinlichkeitsverteilung von X und Y genannt.
Zwei Zufallsvariablen X und Y heißen unabhängig, wenn für alle (x, y) ∈ R2 gilt:
PrX,Y (x, y) = Pr(X = x ∧ Y = y) = PrX (x) · PrY (y)
113
Anhang A Anhang
A.2 Geburtstagsangriff
Theorem 3.4 (Geburtstagsangriff)
Ist die Hashfunktion durch ein Zufallsorakel modelliert, so beträgt die Anzahl der zu
hashenden Nachrichten mindestens 2n bzw. 2n/2 , um ein Urbild bzw. eine Kollision zu
finden.
Beweis:
1. Finden eines Urbildes
Die Hashwerte sind zufällig gleichtverteilt auf {0, 1}n , weil die Hashfunktion
eine ideale Hashfunktion ist. Sei H ein vorgegebener Hashwert. Wählt man eine
Nachricht zufällig, so ist ein Hashwert h(m) mit Wahrscheinlichkeit 1/2n gleich
dem gesuchten H. Also sollen mindestens 2n Nachrichten gehascht werden.
2. Finden einer Kollision
Sei h eine ideale Hashfunktion. Bezeichnen wir mit E die folgende Menge:
E = {m1 , m2 , · · · , mk , mit mi 6= mj , ∀ i 6= j ∈ {1, · · · , k}}
Wobei die Nachrichten mi zufällig aus {0, 1}n ausgewählt sind. Für i = 1, · · · , k
bezeichne Ei das Ereignis
h(mi ) ∈
/ {h(m1 ), h(m2 ), · · · , h(mi−1 )}“.
”
Dann beschreibt die E1 ∨ E2 · · · ∨ Ek das Ereignis
Es gibt keine Kollision für die Hashfunktion h“
”
Also für i = 1, · · · , k gilt
Pr[Ei |E1 ∨ E2 · · · ∨ Ei−1 ] =
2n − i + 1
.
2n
Daraus folgt die Erfolgswahrscheinlichkeit eine Kollision zu finden
114
Anhang A Anhang
n
n
2n − 1
2 −2
2 −k−1
Pr[Es gibt eine Kollision] = 1 −
·
···
.
2n
2n
2n
1
2
k−1
= 1 − 1 − n · 1 − n ··· 1 − n
.
2
2
2
Mit 1 − x ≈ e−x folgt
Pr[ Es gibt eine Kollision] ≈ 1 − e
−1
2n
−2 −(k−1) n
2
· e
· · · e 2n
.
Somit gilt
−k2
Pr[ Es gibt eine Kollision] = 1 − e 2n+1 .
Da k(k − 1) ≈ k 2 für ein grosses k ist , folgt
−k2
Pr[Es gibt eine Kollision] = e 2n+1 .
Also die Erfolgswahrscheinlichkeit ist gleich 1/2 genau dann wenn
−k2
1
= e 2n+1
2
Lösen wir diese Gleichung nach k auf, so bekommen wir
√
k ≈ 1.18 2n
Das bedeutet, dass die Anzahl der zu hashenden Nachrichten mindestens 2n/2
beträgt, um eine Kollision zu finden.
115
Anhang A Anhang
Theorem 3.5 (k-Kollision)
Ist die Hashfunktion durch ein Zufallsorakel modelliert, so beträgt die Anzahl der zu
hashenden Nachrichten mindestens 2n(k−1)/k , um eine k-Kollision zu finden.
Um das Theorem zu beweisen, benötigen wir das folgende Lemma
Lemma: Sei f : A → {0, 1}n ein Zufallsorakel. Werden r Anfragen an das Orakel
f gesendet, so ist die Wahrscheinlichkeit ein k-Weg für f zu finden gleich r/2(k−1)n ,
wobei A für den Definitionsbereich von f steht.
Beweis des Lemmas : Seien x1 , x2 , · · · , xq zufällig gewählte Nachrichten aus A. Da f
ein Zufallsorakel ist, ergibt sich daraus, dass die Werte f (x1 ), f (x2 ), · · · , f (xq ) zufällig
und unabhängig gleichmässig verteilt auf {0, 1}n sind. Daraus folgt
Pr[f (xj1 ) = · · · f (xjk )] =
1
2n(k−1)
Seien A1 , · · · , Aj k-elemetigen Untermengen aus der Menge {x1 , x2 , · · · , xq }, wobei
j = kq .
Für jedes i bezeichnet Ei das Ereignis Ai ist eine k-Kollision“. Also die Menge ∨i Ei
”
beschreibt das Ereigns Es existiert ein k-Weg aus der Menge {x1 , x2 , · · · , xq }“.
”
Also zum Finden einer k-Kollision ist die Wahrscheinlichkeit gleich
Pr[∨i Ei ] ≤
X
Pr[Ei ]
i
q
k
2n(k−1)
=
Wegen
q
q · (q − 1) · (q − 2) · · · (q − k + 1)
=
k!
k
qk
≤
k!
erhalten wir
Pr[∨i Ei ] ≤ C ·
116
qk
2n(k−1)
,
Anhang A Anhang
wobei C eine Konstante ist. Und somit ist das Lemma bewiesen.
Beweis des Theorems 3.5: Aus dem Lemma folgt, dass die Wahrscheinlichkeit eine
qk
k-Kollision zu finden kleiner gleich 2n(k−1)
ist.
Setzen wir Pr[∨i Ei ] = 1 und lösen die folgende Ungleichung nach q auf:
qk
2n(k−1)
≥1
Es ergibt sich
qk
2n(k−1)
≥ 1 ⇔ q ≥ 2n(k−1)/k
117
Literaturverzeichnis
[1] FIPS 197. Advanced encryption standard. National Institute of Standards and
Technology, Nov. 2001.
[2] FIPS 46-3. Data encryption standard. National Institute of Standards and Technology, Oct. 1999.
[3] Mihir Bellare, Ran Canetti, and Hugo Krawczyk. Keying Hash Functions for
Message Authentication, volume 1109 of LNCS. Springer, 1996.
[4] Mihir Bellare, Ran Canetti, and Hugo Krawczyk. Message authentication using
hash functions: the HMAC construction. CryptoBytes, 2(1):12–15, Spring 1996.
[5] Mihir Bellare and Thomas Ristenpart. Multi-property-preserving hash domain
extension and the emd transform. In Xuejia Lai and Kefei Chen, editors, ASIACRYPT, volume 4284 of LNCS, pages 299–314. Springer, 2006.
[6] Mihir Bellare and Phillip Rogaway. Random oracles are practical: A paradigm
for designing efficient protocols. In ACM Conference on Computer and Communications Security, pages 62–73, 1993.
[7] Mihir Bellare and Phillip Rogaway. Collision-resistant hashing: Towards making
uowhfs practical. In CRYPTO ’97: Proceedings of the 17th Annual International Cryptology Conference on Advances in Cryptology, LNCS, pages 470–484.
Springer-Verlag, 1997.
[8] Eli Biham, Rafi Chen, Antoine Joux, Patrick Carribault, Christophe Lemuet, and
William Jalby. Collisions of SHA-0 and Reduced SHA-1, volume 3494 of LNCS.
Springer, 2005.
[9] Eli Biham and Orr Dunkelman. A framework for iterative hash functions - haifa.
2007. http://eprint.iacr.org/.
[10] John Black, Phillip Rogaway, and Thomas Shrimpton. Black-box analysis of the
block-cipher-based hash-function constructions from pgv. In CRYPTO, volume
2442 of LNCS, pages 320–335, 2002.
118
Literaturverzeichnis
[11] M.M. Hyden S.M. Matyaa C.H.W. Meyer J. Oseas S. Pilpel B.O. Brachtal,
D. Coppersmith and M. Shilling. ”data authentication using modification detection codes based on a public one-way encryption function”,u.s. patent no.
4,908,861. 1990.
[12] Lawrence Brown, Josef Pieprzyk, and Jennifer Seberry. LOKI—a cryptographic primitive for authentication and secrecy applications, volume 453 of LNCS.
Springer-Verlag, 1990.
[13] Johannes Buchmann. Einführung in die Kryptographie. Springer, Berlin, 2003.
[14] C. CANNIÈRE, C. D. ; RECHBERGER. Finding sha-1 characteristics: General
results and applications. In Advances in Cryptology – ASIACRYPT 2006, volume
4284 of LNCS, page 1–20, 2006.
[15] Florent Chabaud and Antoine Joux. Differential collisions in sha-0. In Advances
in Cryptology — CRYPTO ’98, volume 1462 of LNCS, pages 56–71. SpringerVerlag, 1998.
[16] Ivan Damgaard. A Design Principle for Hash Functions, volume 435 of LNCS.
Springer, 1990.
[17] D. Davies and W. L. Price. Digital signatures, an update. Proc. 5th International
Conference on Computer Communication, page 845–849, October 1984.
[18] B. den Boer. A. Bosselaers. An Attack of the last Two Rounds of MD4, volume
576 of LNCS. Springer, 1992.
[19] H. Dobbertin. Cryptanalysis of md4. Journal of Cryptology, 11(4):253–271, 1998.
[20] Hans Dobbertin, Antoon Bosselaers, and Bart Preneel. RIPEMD-160: A strengthened version of RIPEMD, volume 1039 of LNCS. Springer, 1996.
[21] Lei Duo and Chao Li. Improved collision and preimage resistance bounds on pgv
schemes. Cryptology ePrint Archive, Report 2006/462, 2006. http://eprint.
iacr.org/.
[22] Claudia Eckert. IT-Sicherheit. Oldenbourg, München, 2004.
[23] Rafi Chen Eli Biham. Near-collisions of sha-0. Cryptology ePrint Archive, Report
2004/146, 2004. http://eprint.iacr.org/.
[24] Niels Ferguson and Bruce Schneier. Practical Cryptography. Wiley, 2003.
[25] A. Fiat and A. Shamir. How to prove yourself: Practical solutions to identification
and signature problems, volume 263 of LNCS. Springer-Verlag, 1987.
119
Literaturverzeichnis
[26] Vincent Rijmen Hirotaka Yoshida Florian Mendel, Bart Preneel and Dai Watanabe. Update on Tiger., volume 4329 of LNCS. Springer, 2006.
[27] S. Goldwasser and M. Bellare. Lecture notes on cryptography. http://www-cse.
ucsd.edu/users/mihir/papers/gb.html, August 2001.
[28] Shai Halevi and Hugo Krawczyk. Strengthening digital signatures via randomized
hashing. In Cynthia Dwork, editor, CRYPTO, volume 4117 of LNCS, pages 41–59.
Springer, 2006.
[29] S. Hirose. How to construct double-block-length hash functions. In The Second
Cryptographic Hash Workshop, Santa Barbara, Aug. 2006. http://csrc.nist.
gov/pki/HashWorkshop/2006/Papers/HIROSE_article.pdf.
[30] Shoichi Hirose. Some Plausible Constructions of Double-Block-Length Hash Functions., volume 4047 of LNCS. Springer, 2006.
[31] Yevgeniy Dodis Jean-Sébastien Coron, Cécile Malinaud, and Prashant Puniya.
Merkle-damgård revisited: How to construct a hash function. In Advances in
Cryptology – CRYPTO 2005, volume 3621 of LNCS, pages 430–448. Springer,
2005.
[32] A. Joux. Multicollisions in Iterated Hash Functions, Application to Cascaded
Constructions, volume 3152 of LNCS. Springer, 2004.
[33] John Kelsey and Tadayoshi Kohno. Herding hash functions and the nostradamus
attack. Cryptology ePrint Archive, Report 2005/281, 2005. http://eprint.
iacr.org/.
[34] John Kelsey and Stefan Lucks. Collisions and Near-Collisions for Reduced-Round
Tiger., volume 4047 of LNCS. Springer, 2006.
[35] John Kelsey and Bruce Schneier. Second Preimages on n-bit Hash Functions for
Much Less than 2n Work, volume 3494 of LNCS. Springer, 2004.
[36] Lars R. Knudsen and Bart Preneel. Hash Functions Based on Block Ciphers and
Quaternary Codes, volume 1163 of LNCS. Springer, 1996.
[37] Lars R. Knudsen and Bart Preneel. Fast and secure hashing based on codes. In
Advances in Cryptology — CRYPTO ’97, volume 1294 of LNCS, pages 485–498.
Springer, 1997.
[38] Lars Ramkilde Knudsen and Xuejia Lai. New attacks on all double block length
hash functions of hash rate 1, including the parallel-DM, volume 950 of LNCS.
Springer, 1995.
120
Literaturverzeichnis
[39] Xuejia Lai and James L. Massey. Hash Functions Based on Block Ciphers, volume
658 of LNCS. Springer, 1993.
[40] Stefan Lucks. Design principles for iterated hash functions, 2004.
//eprint.iacr.org/2004/253.pdf.
http:
[41] Stefan Lucks. A Failure-Friendly Design Principle for Hash Functions., volume
3788 of LNCS. Springer, 2005.
[42] K. Martin and C. Mitchell. Analysis of hash function of yi and lam. Electronics Letters, 34:2327–2328, 1998. http://www.esat.kuleuven.ac.be/cosic/
aspect/papers/kul093.ps.
[43] E. H. Mckinney. Generalized birthday problem. The American Mathematical
Monthly, 73:385–387, 1966.
[44] Alfred J. Menezes, Scott A. Vanstone, and Paul C. Van Oorschot. Handbook of
Applied Cryptography. CRC Press, Inc., 1996.
[45] Ralph C. Merkle. A certified digital signature, volume 435 of LNCS. Springer,
1989. http://dsns.csie.nctu.edu.tw/research/crypto/HTML/PDF/C89/218.
PDF.
[46] Ralph C. Merkle. One way hash functions and DES, volume 435 of LNCS. Springer, 1990. http://dsns.csie.nctu.edu.tw/research/crypto/HTML/PDF/C89/
428.PDF.
[47] C.H. Meyer and M. Schilling. Secure program load with manipulation detection
code,. Proceedings Securicom, pages 111–130, 1988.
[48] Mridul Nandi. Designs of efficient secure large hash values. Cryptology ePrint
Archive, Report 2004/296, 2004. http://eprint.iacr.org/.
[49] Mridul Nandi, Wonil Lee, Kouichi Sakurai, and Sangjin Lee. Security analysis
of a 2/3-rate double length compression function in the black-box model. In
Henri Gilbert and Helena Handschuh, editors, FSE, volume 3557 of LNCS, pages
243–254. Springer, 2005.
[50] M. Naor and M. Yung. Universal one-way hash functions and their cryptographic
applications. ACM Press, 1989.
[51] NIST. Federal information processing standards publication 180-2. Technical
report, August 2002 / February 2004. http://www.governmentsecurity.org/
articles/articles2/fips-180-2.pdf_fl/.
121
Literaturverzeichnis
[52] E. P. Dawson P. Gauravaram, W. Millan and K. Viswanathan. Constructing Secure Hash Functions by Enhancing Merkle-Damgard Construction., volume 4058
of LNCS. Springer, 2006.
[53] Wen-Ling Wu Pin Lin and Chuan-Kun Wu. Security analysis of double length
compression function based on block cipher. International Journal of Network
Security, 4:121–127, 2007.
[54] Juanma Gonzalez Nieto Praveen Gauravaram, William Millan and Edward Dawson. 3c- a provably secure pseudorandom function and message authentication
code.a new mode of operation for cryptographic hash function. Cryptology ePrint
Archive, Report 2005/390, 2005. http://eprint.iacr.org/.
[55] Bart PRENEEL. Analysis and Design of Cryptographic Hash Functions. PhD thesis, February 2003. http://homes.esat.kuleuven.be/~preneel/phd_preneel_
feb1993.pdf.
[56] Bart Preneel. Hash functions, June 2005. http://ecrypt.eu.org/stvl/hfw/
Preneel.pdf.
[57] Bart Preneel, René Govaerts, and Joos Vandewalle. Hash Functions Based on
Block Ciphers: A Synthetic Approach, volume 773 of LNCS. Springer, 1993.
[58] Ronald L. Rivest. The md4 message digest algorithm. In Alfred Menezes and
Scott A. Vanstone, editors, CRYPTO, volume 537 of LNCS, pages 303–311. Springer, 1990.
[59] Ronald L. Rivest. The MD5 message-digest algorithm, 1992. http://theory.
lcs.mit.edu/~rivest/rfc1321.txt1321.
[60] P. Rogaway and T. Shrimpton. Cryptographic hash-function basics: Definitions,
implications and separations for preimage resistance, second-preimage resistance,
and collision resistance, volume 3017 of LNCS. Springer, 2004.
[61] M. Iwata S. Miyaguchi and K. Ohta. New 128-bit hash function.(n-hash). NTT
Review, 2(6):128–132., Nov. 1990.
[62] Bruce Schneier. Angewandte Kryptographie. Addison-Wesley, 1996.
[63] Bruce Schneier. Applied Cryptography. John Wiley & Sons, New York, 1996.
[64] Claude E. Shannon. Communication theory of secrecy systems. Bell System
Technical Journal, 28:656–715, 1949.
[65] Victor Shoup. A Composition Theorem for Universal One-Way Hash Functions,
volume 1807 of LNCS. Springer, 1999.
122
Literaturverzeichnis
[66] Daniel R. Simon. Finding Collisions on a One-Way Street: Can Secure Hash
Functions Be Based on General Assumptions?, volume 1403 of LNCS. Springer,
1998.
[67] C.H. Meyer S.M. Matyas and J. Oseas. Generating strong one-way functions with
cryptographic algorithm. IBM Techn. Disclosure Bull, 27:5658–5659., 1985.
[68] Paul C. van Oorschot and Michael J. Wiener. Parallel collision search with cryptanalytic applications. Journal of Cryptology, 12(1):1–28, 1995.
[69] David Wagner. Cryptanalysis of the Yi-Lam Hash, volume 1976 of LNCS. Springer, 2000.
[70] Thomas Meier Walter Hohl, Xuejia Lai and Christian Waldvogel. Security of
iterated hash functions based on block ciphers, volume 773 of LNCS. Springer,
1994.
[71] Xiaoyun Wang, Dengguo Feng, Xuejia Lai, and Hongbo Yu. Collisions for hash
functions md4, md5, haval-128 and ripemd. Cryptology ePrint Archive, Report
2004/199, 2004. http://eprint.iacr.org/.
[72] Xiaoyun Wang, Yiqun Lisa Yin, and Hongbo Yu. Collision search attacks on
sha1. February 2005. http://www.infosec.sdu.edu.cn/paper/sha-attack-note.pdf.
[73] Xiaoyun Wang and Hongbo Yu. How to Break MD5 and Other Hash Functions.,
volume 3494 of LNCS. Springer, 2005.
[74] Robert S. Winternitz. Producing a One-Way Hash Function from DES. 1984.
[75] Robert S. Winternitz. A Secure One-Way Hash Function Built from DES., volume 00. IEEE Computer Society, 1984.
[76] Reinhard Wobst. Abenteuer Kryptologie : Methoden, Risiken und Nutzen der
Datenverschlüsselung. Addison-Wesley Verlag, 2001.
[77] Yiqun Lisa Yin Xiaoyun Wang and Hongbo Yu. Finding Collisions in the Full
SHA-1., volume 3621 of LNCS. Springer, 2005.
[78] Xun Yi and Kwok-Yan Lam. A New Hash Function Based on Block Cipher,
volume 1270 of LNCS. Springer-Verlag, 1997.
[79] Gideon Yuval. How to swindle Rabin. Cryptologia, 3(3):187–189, July 1979.
123
Index
k-Kollision, 28
3C -Hashfunktion
3C-X Hashfunktion, 47
Kaskadierte Hashfunktion, 32
Kelsey-Schneier-Angriff, 34
Kollision, 28
Querkollision, 44
Strikte Kollision, 44
Kollisionen, 13
Kollisionsangriff, 16
Kompressionsfunktion, 19
kryptographische Hashfunktion, 15
Blockchiffre, 66
Ideale Blockchiffre, 67
Blockchiffre-basierte Hashfunktion, 68
Blockchiffre-basierte Kompressionsfunktion, 68
Brute Force-Angriff, 16
Chosen-Target-Forced-Prefix Perimage resistence, 36
CTFP
Preimage Resistenz, 36
Length Extension, 25
Length Extension-Property, 25
Einwegfunktion, 12
expandierbare Nachricht, 34
Matyas-Meyer-Oseas Verfahren, 71
MDC-2, MDC-4, 91
Merkle-Damgård-Konstruktion, 21
Merkle-Damgård-Theorem, 22
Miyaguchi-Preenel-Verfahren, 74
Multikollision, 28
Multikollision-Angriff, 30
Multiweg-Urblid-Theorem, 33
Falltürfunktion, 13
Nandi-Hash, 97
Geburtstagsangriff, 27
Graph-Drawing-Attack, 82
Parallel-DM, 93
Partial-message-collision, 26
Preimage-Angriff, 16
Preneel-Govaets-Vandewalle-Konstruktionen,
74
Davies-Meyer-Verfahren, 72
Diamantstruktur, 37
Double-Block-Length , 91
Hash-Rate, 69
Hashfunktion, 13
Herding-Angriff, 36
Hirose-Hash, 100
Randomisiertes Hashing, 49
Shannon-Modell, 67
Sicherheitsniveau, 17
Standardmodell, 67
Ideal Cipher Model, 67
Joux-Theorem, 32
Joux-Multikollision, 30
124
Index
Target-Kollisionsresistanz, 50
Wide-Pipe
Double-Pipe, 40
Wide-Pipe-Multikollision, 41
Yi-Lam-Hash, 95
zusammengehöriges Paar, 102
125

Documents pareils