diplomarbeit

Werbung
DIPLOMARBEIT
Statistische Analyse der Hashfunktionen,
die gemäß der österreichischen
Signaturverordnung empfohlen werden
durchgeführt am
Studiengang Telekommunikationstechnik und -systeme
an der
Fachhochschule Salzburg
vorgelegt von:
Sabine Wurmhöringer
Studiengangsleiter:
Betreuer:
Prof. Dipl.-Ing. Dr. Gerhard Jöchtl
Univ.-Doz. Dr. Stefan Wegenkittl
Salzburg, November 2004
c 2004
Copyright Sabine Wurmhöringer
ALL RIGHTS RESERVED
ii
Für meine Eltern.
Die Güte des Vaters übersteigt die Höhe der Berge,
die Güte der Mutter geht tiefer als das Meer.
Japanische Weisheit
iii
Eidesstattliche Erklärung
Hiermit versichere ich, Sabine Wurmhöringer, geb. 02.06.1981, dass die vorliegende
Diplomarbeit von mir selbständig verfasst wurde. Zur Erstellung wurden von mir keine
anderen als die angegebenen Hilfsmittel verwendet.
Nachname Vorname
Matrikelnummer
iv
Danksagung
Je mehr man schon weiß, je mehr hat man noch zu lernen.
Mit dem Wissen nimmt das Nichtswissen in gleichem Grade zu,
oder vielmehr das Wissen des Nichtswissen.
Friedrich von Schlegel
An dieser Stelle möchte ich allen danken, die zum Gelingen dieser Arbeit beigetragen
haben.
Univ.-Doz. Dr. Stefan Wegenkittl danke ich ganz herzlich für die Betreuung dieser
Arbeit und vor allem für das Engagement mit der er diese durchgeführt hat.
Ein herzliches Dankeschön gilt auch Ao. Univ. Prof. Dr. Peter Hellekalek, der die
Durchführung dieser Arbeit an seinem Institut ermöglichte und durch sein Interesse
und kritische Anmerkungen einige Denkanstöße gegeben hat.
Mein besonderer Dank gilt jedoch meinen Eltern, die mir das Studium ermöglicht
haben und die mir stets in allen Lebenslagen eine große Stütze waren.
Vielen Dank!
v
Kurzfassung
Vor- und Zuname:
Institution:
Studiengang:
Titel der Diplomarbeit:
Betreuer an der FH:
Betreuer in der Firma:
Sabine Wurmhöringer
FH Salzburg
Telekommunikationstechnik und -systeme
Statistische Analyse der Hashfunktionen, die
gemäß der österreichischen Signaturverordnung empfohlen werden
Univ.-Doz. Dr. Stefan Wegenkittl
Ao. Univ. Prof. Dr. Peter Hellekalek
Schlagwörter
1. Schlagwort:
2. Schlagwort:
3. Schlagwort:
Digitale Signatur
Einweg-Hashfunktionen
Statistische Tests
Abstract
The security of digital signature depends decisively on the quality of the applied oneway hash function. The first objective of this diploma thesis is to define and describe
cryptographic hash functions and to explain the characteristics that are essential for
use in digital signature procedures. The legal position of digital signatures in Austria
is dealt with. This is followed by some examples concerning the demanded characteristics of hash functions and some common attacking methods. Modern hash algorithms
such as RIPEMD-160 and SHA-1 are introduced and their inner structure is discussed
together with an empirical statistical analysis of these two algorithms. Therefore the
second part of this thesis deals with statistical testing and common testing methods.
Finally a documentation and explanation of the findings of the applied overlapping
serial test statistics is presented.
vi
Inhaltsverzeichnis
Eidesstattliche Erklärung
iv
Danksagung
v
Kurzfassung
vi
Schlagwörter
vi
Abstract
vi
Abbildungsverzeichnis
x
Tabellenverzeichnis
xi
1 Einleitung
1.1
1.2
1
Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Überblick
1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3
Digitale Signatur und ihre Anwendungsbereiche . . . . . . . . . . . . .
3
1.4
Technische und rechtliche Aspekte qualitativ hochwertiger Hashfunktionen
4
1.4.1
Das österreichische Signaturgesetz . . . . . . . . . . . . . . . . .
4
1.4.2
Die österreichische Signaturverordnung . . . . . . . . . . . . . .
6
2 Kryptographische Hashfunktionen
2.1
7
Die Notwendigkeit des Einsatzes von Hashfunktionen in der digitalen
Signatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2
Einweg-Hashfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.3
Eigenschaften kryptographischer Hashfunktionen . . . . . . . . . . . . .
11
2.4
Unterschriften mit asymmetrischer Kryptographie . . . . . . . . . . . .
12
2.5
Unterschriften mit asymmetrischer Kryptographie und Hashfunktionen
14
vii
2.6
Kollisionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.7
Angriffsarten auf Hashfunktionen . . . . . . . . . . . . . . . . . . . . .
17
2.7.1
Der Preimage-Angriff . . . . . . . . . . . . . . . . . . . . . . . .
18
2.7.2
Der Second-Preimage-Angriff . . . . . . . . . . . . . . . . . . .
18
2.7.3
Der Geburtstagsangriff . . . . . . . . . . . . . . . . . . . . . . .
19
2.7.3.1
Das Geburtstagsparadoxon . . . . . . . . . . . . . . .
19
2.7.3.2
Der Angriff . . . . . . . . . . . . . . . . . . . . . . . .
24
2.7.4
Verkettungsangriffe . . . . . . . . . . . . . . . . . . . . . . . . .
26
2.7.5
Zusammenhang der Angriffe mit der Forderung nach Gleichverteilung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
Übersicht über verschiedene Arten von Hashfunktionen . . . . . . . . .
28
2.8.1
Hashfunktionen basierend auf modularer Arithmetik
. . . . . .
30
2.8.2
Hashfunktionen basierend auf Blockchiffren . . . . . . . . . . . .
31
2.8.3
Angepasste Hashfunktionen . . . . . . . . . . . . . . . . . . . .
31
2.8
3 Detailbeschreibung der Hashfunktionen
34
3.1
MD4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
3.2
MD5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
3.3
SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
3.4
RIPEMD-160 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4 Statistisches Testen
50
4.1
Die Notwendigkeit statistischer Tests . . . . . . . . . . . . . . . . . . .
50
4.2
Das Prinzip des statistischen Testens . . . . . . . . . . . . . . . . . . .
51
4.3
Allgemeine Testverfahren . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.3.1
Der χ2 -Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.3.2
Der Kolmogorov-Smirnov-Test . . . . . . . . . . . . . . . . . .
57
Empirische Tests auf Gleichverteilung . . . . . . . . . . . . . . . . . . .
58
4.4.1
Der Frequenztest . . . . . . . . . . . . . . . . . . . . . . . . . .
59
4.4.2
Der Serielle Test . . . . . . . . . . . . . . . . . . . . . . . . . .
59
4.4.3
Der Pokertest . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.4
viii
5 Der Test
62
5.1
Load Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
5.2
Testergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
5.2.1
RIPEMD-160 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
5.2.2
SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
6 Zusammenfassung
68
Literaturverzeichnis
69
Abkürzungsverzeichnis
71
Appendix
72
A RSA
73
B Tabellen
75
C Vergleichsgeneratoren
77
C.1 RANDU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
C.2 ANSIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
ix
Abbildungsverzeichnis
2.1
Ablauf bei der Bildung von Hashwerten . . . . . . . . . . . . . . . . . .
10
2.2
Mögliche Aufteilung der Gesamtmengen, wenn die Hashwerte nicht gleichverteilt generiert werden. . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.3
Unterschrift mit asymmetrischer Kryptographie . . . . . . . . . . . . .
13
2.4
Signatur mit asymmetrischer Kryptographie und Einweg-Hashfunktion
15
2.5
Kollisionen bei Hashfunktionen nach [1] . . . . . . . . . . . . . . . . . .
17
2.6
Der Geburtstagsangriff . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
2.7
Einteilung der Hashfunktionen in verschiedene Kategorien . . . . . . .
29
3.1
Vorbereitung einer Nachricht als Eingang der Hashfunktion . . . . . . .
37
3.2
Eine Operation von MD5 . . . . . . . . . . . . . . . . . . . . . . . . . .
41
3.3
Eine Operation von SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . .
44
3.4
Eine Operation von RIPEMD-160 . . . . . . . . . . . . . . . . . . . . .
49
4.1
Statistischer Test mit einseitiger Alternative . . . . . . . . . . . . . . .
54
4.2
Statistischer Test mit beidseitiger Alternative . . . . . . . . . . . . . .
54
4.3
Statistischer Test mit einseitiger Alternative und zutreffender Alternativhypothese H1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
5.1
Vorbereitung des Eingangs für den überlappenden seriellen Test . . . .
63
5.2
Erzeugung der überlappenden Vektoren Vi der Länge t . . . . . . . . .
64
5.3
KS-Werte für RIPEMD-160 . . . . . . . . . . . . . . . . . . . . . . . .
66
5.4
χ2 -Werte für RIPEMD-160 . . . . . . . . . . . . . . . . . . . . . . . . .
66
5.5
KS-Werte für SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
5.6
χ2 -Werte für SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
C.1 KS-Werte für RANDU . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
C.2 χ2 -Werte für RANDU . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
C.3 KS-Werte für ANSIC . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
C.4 χ2 -Werte für ANSIC . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
x
Tabellenverzeichnis
2.1
Obergrenze der Stärke ausgewählter Hashfunktionen [2] . . . . . . . . .
30
3.1
Notation für MD4 [2] . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.2
Notation für MD5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
3.3
Notation für RIPEMD-160 [2] . . . . . . . . . . . . . . . . . . . . . . .
45
3.4
Zusammenfassung der beschriebenen Hashfunktionen . . . . . . . . . .
49
4.1
Fehlermöglichkeiten bei Hypothesentests . . . . . . . . . . . . . . . . .
53
5.1
Einganswerte für die Hashfunktion . . . . . . . . . . . . . . . . . . . .
63
B.1 Prozentanteile für die χ2 -Verteilung mit v Freiheitsgraden [2]. . . . . .
75
B.2 K-S-Werte für RIPEMD-160 . . . . . . . . . . . . . . . . . . . . . . . .
76
B.3 K-S-Werte für SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
xi
1
Einleitung
1.1
Einleitung
Seit Menschengedenken besteht der Wunsch, die Abgabe einer Willenserklärung verbindlich zu gestalten. Ziel ist die (nachträgliche) Sicherstellung deren Echtheit und
Verbindlichkeit. Die Signatur schließt den Vorgang der Willenserklärung ab und dient
der späteren Beweisbarkeit. Das Wort Signatur geht auf den lateinischen Begriff Signum
zurück, der Zeichen bedeutet.
In der heutigen Zeit ist die gängigste Form der Signatur die handschriftliche Unterschrift. Früher waren Siegel weit verbreitet, wobei sie anfangs nur zum Versiegeln von
Briefen und erst ab dem Mittelalter auch in Verbindung mit Rechtsgeschäften eingesetzt wurden. Noch heute werden amtliche Urkunden mit einer modernen Form des
Siegels - dem Stempel - beglaubigt.
Um in der Bevölkerung beim Übergang vom Siegel zur händischen Unterschrift die
nötige Akzeptanz zu erreichen, musste Vertrauen in die neue Art der Signatur entstehen. Damit dieses Vertrauen entstehen konnte, musste das neue System die nötige
Sicherheit bieten.
Heute, einige hundert Jahre später, steht die Etablierung der digitalen Signatur vor
einem ähnlichen Problem. In einer digitalen Welt, in der Rechtsgeschäfte global über
weite Entfernungen getätigt werden, soll die digitale Signatur die Verbindlichkeit von
Willenserklärungen sicherstellen. Daher muss die Sicherheit und Rechtsgültigkeit einer
digitalen Signatur gewährleistet sein.
1
1. Einleitung
2
Da kryptographische Hashfunktionen1 ein essentieller Bestandteil des Verfahrens der
digitalen Signatur sind, muss auch für sie ein bestimmter Qualitätsstandart garantiert
sein. Daher wurden einige grundlegende Eigenschaften für Hashfunktionen definiert,
die die Erfüllung der Anforderungen sicherstellen sollen. Diese werden im Zuge dieser Arbeit mittels statistischer Methoden überprüft, welche die Sicherheit nach dem
heutigen Stand des Wissens bestätigen können.
1.2
Überblick
Die vorliegende Arbeit befasst sich mit der statistischen Analyse der Hashfunktionen
vor der rechtlichen Grundlage der digitalen Signatur in Österreich. Daher wird in der
Einleitung die Notwendigkeit des Einsatzes digitaler Signatur und der Stellenwert kryptographischer Hashfunktionen erläutert. Weiters wird der rechtliche Rahmen in Österreich vorgestellt.
Das zweite Kapitel beschäftigt sich eingehend mit der Definition, dem grundsätzlichen Aufbau und den geforderten statistischen Eigenschaften kryptographischer Hashfunktionen, um einen sicheren Einsatz in der digitalen Signatur gewährleisten zu können.
Anhand einiger Beispiele wird erläutert, warum die Erfüllung der geforderten Eigenschaften, in Bezug auf mögliche Angriffsstrategien, für die Qualität einer Hashfunktion
ausschlaggebend ist. Folgend wird die historische Entwicklung, angefangen von MD2 bis
zum heutigen Stand kurz erwähnt und eine Einteilung von Hashfunktionen in verschiedene Kategorien vorgenommen. Ausgehend von der Empfehlung der österreichischen
Signaturverordnung RIPEMD-160 und SHA-1 einzusetzen werden die Struktur und die
Algorithmen dieser Hashfunktionen in Kapitel 3 eingehend betrachtet.
Ziel der vorliegenden Arbeit war die empirische Analyse dieser Algorithmen, weshalb
sich Kapitel 4 der Arbeit mit der Vorgangsweise bei der Durchführung statistischer
Tests befasst. Dabei werden auch die in der Literatur empfohlenen und in der Praxis
gängigen Testverfahren erläutert. Abschließend folgt eine Dokumentation des durchgeführten empirischen Tests bei RIPEMD-160 und SHA-1 und eine Erläuterung der so
entstandenen Ergebnisse.
1
Hashfunktionen sind Verfahren, die aus einem Dokument einen repräsentativen Wert generieren
um den Prozess der digitalen Signatur zu optimieren.
1. Einleitung
1.3
3
Digitale Signatur und ihre Anwendungsbereiche
Im Zeitalter der elektronischen Kommunikation und Information verlagert sich der
Datenfluss immer mehr auf das Medium Internet. Traditionelle Kommunikationswerkzeuge, wie der Briefverkehr werden zunehmend durch den Informationsaustausch via
E-Mail ersetzt. Auch die Bestellung von Büchern und anderen Artikeln wird immer
öfter online“ durchgeführt. Trotz der klaren Vorteile, die der elektronische Datenaus”
tausch mit sich bringt, werden wichtige Rechtsgeschäfte über E-Mail noch sehr selten
getätigt. Laut [3] liegt die Begründung hierfür in der fehlenden Authentifikation des
Absenders in Form einer Unterschrift. Die Absenderadressen von E-Mails können selbst
von Laien ohne großen Aufwand manipuliert werden und auch die Inhalte können von
versierten Angreifern leicht verändert werden.
Die elektronische Kommunikation benötigt also eine authentische Zuordnung von Inhalten zu Personen oder Institutionen. Insbesondere für den Verkehr mit Behörden und
Ämtern aber auch in der Privatwirtschaft ist eine sichere Zuordnung von eminenter
Bedeutung.
Die Lösung für dieses Problem stellt die digitale Signatur dar. Sie stellt Verfahren zur
Verfügung, welche die Authentifizierung einer Person technisch zweifelsfrei sicherstellen. Sie macht die Zuordnung einer Person zu einem Zertifikat und die Unversehrtheit
eines Dokumentes jederzeit überprüfbar. Um Manipulationen auszuschließen und die
Identität des Senders bzw. des Empfängers zu gewährleisten, werden u.a. kryptographische Verfahren angewendet, welche als asymmetrische Verschlüsselung oder PublicKey-Verfahren bezeichnet werden. Weil die Public-Key Verschlüsselung aufwendig und
langsam ist (siehe auch Kapitel 2.4), empfiehlt es sich nicht den gesamten Klartext
eines Dokumentes zu verschlüsseln, da darunter das Leistungsverhalten leiden würde.
Anstatt also den gesamten Klartext zu verschlüsseln besteht laut [1] die beste Methode
darin, einen repräsentativen Teil der Daten zu verschlüsseln. Dieser repräsentative Teil
der Daten wird als Hashwert bezeichnet. Die Erstellung eines solchen Hashwerts erfolgt
bei der digitalen Signatur durch die Anwendung von Einweg-Hashfunktionen, welche
in Kapitel 2.2 erläutert werden.
1. Einleitung
1.4
4
Technische und rechtliche Aspekte qualitativ
hochwertiger Hashfunktionen
Eine Hashfunktion bildet ein Element aus dem Klartextraum (alle möglichen Nachrichten) auf ein Element des Hashraumes (alle möglichen Hashwerte) ab. Die Signatur
selbst wird dann auf den gebildeten Hashwert angewendet. Daher muss auf jeden Fall
gewährleistet sein, dass ein Hashwert tatsächlich einem bestimmten Text zugewiesen
werden kann, da ansonsten die Signatur wertlos wäre. Die Qualität der gesamten Signatur hängt demzufolge maßgeblich von der Qualität der verwendeten Hashfunktion
ab. In Kapitel 2.3 sind die Eigenschaften angeführt, die eine Hashfunktion mindestens
erfüllen muss, um als qualitativ hochwertig eingestuft zu werden. Diese Eigenschaften,
dienen dazu die Angriffsmöglichkeiten auf die Hashfunktion und somit auf die digitale
Signatur möglichst gering zu halten. Jedoch stellen sie keinerlei Garantie dar, da sie
nur durch statistische Methoden überprüft werden können. Die Aufgabe dieser Arbeit besteht nun darin die in Kapitel 2.3 geforderten Eigenschaften mit Methoden der
beschreibenden und schließenden Statistik für die Hashfunktionen, die in der österreichischen Signaturverordnung empfohlen werden, zu überprüfen. Dies ist im Besonderen
auf empirischem Wege, unter Zuhilfenahme statistischer Tests möglich. Daher ist statistischen Testverfahren auch ein eigenes Kapitel gewidmet.
Die rechtliche Grundlage für die digitale Signatur in Österreich stellt das Österreichische Signaturgesetz mit der dazugehörigen Verordnung dar.
1.4.1
Das österreichische Signaturgesetz
Das österreichische Signaturgesetz [4] trat am 1. Jänner 2000 in Kraft. Das Verfahren
der Public-Key Verschlüsselung wird in der kryptographischen Gemeinschaft normalerweise als digitale Signatur bezeichnet [1], wird jedoch im Signaturgesetz [4] unter dem
Begriff elektronische Signatur gehandhabt, wobei dieser Ausdruck folgendermaßen definiert ist.
1. Einleitung
5
Elektronische Signatur: elektronische Daten, die anderen Daten beigefügt oder mit diesen logisch verknüpft werden und die der Authentifizierung, also der Feststellung der Identität des Signators dienen [4].
Der Signator ist dabei die Person die eine elektronische Signatur erstellt oder ein Zertifizierungsdienstanbieter. Weiters ist im [4] festgelegt, was in Österreich als sichere
elektronische Signatur gilt:
Sichere elektronische Signatur: eine elektronische Signatur, die
1. ausschließlich dem Signator zugeordnet ist,
2. die Identifizierung des Signators ermöglicht,
3. mit Mitteln erstellt wird, die der Signator unter seiner alleinigen Kontrolle halten kann,
4. mit den Daten, auf die sie sich bezieht, so verknüpft ist, dass jede
nachträgliche Veränderung der Daten festgestellt werden kann, sowie
5. auf einem qualifizierten Zertifikat beruht und unter Verwendung von
technischen Komponenten und Verfahren, die den Sicherheitsanforderungen dieses Bundesgesetzes und der auf seiner Grundlage ergangenen
Verordnungen entsprechen, erstellt wird.
Aufgrund dieses Gesetzes erfüllt eine entsprechende elektronische Signatur das rechtliche Erfordernis einer eigenhändigen Unterschrift. Hierbei gibt es allerdings einige
Ausnahmen, wie z.B. Rechtsgeschäfte im Erbrecht, die im [4] nachzulesen sind.
1. Einleitung
1.4.2
6
Die österreichische Signaturverordnung
Zum österreichischen Signaturgesetz existiert auch eine Signaturverordnung, die am 2.
Februar 2000, also ein Monat nach dem Inkrafttreten des Signaturgesetzes, ausgegeben
wurde.
Hier finden sich Vorgaben zur Infrastruktur, Hard- und Software beim Einsatz digitaler Signaturen wieder. Neben Sicherheits- und Schutzmaßnahmen bezüglich der
technischen Komponenten sind die zur Verwendung vorgeschriebenen Algorithmen zur
Erstellung einer sicheren elektronischen Signatur angegeben. Folgend wird ein Auszug
aus der österreichischen Signaturverordnung [5] gegeben:
Bei der Aufsichtsstelle ist als Hashverfahren SHA-1 und zur Verschlüsselung des Hashwerts das Verfahren RSA einzusetzen. ... Werden von der
Aufsichtsstelle zusätzliche Signaturerstellungsdaten eingesetzt, so muss es
sich bei den entsprechenden Verfahren zur Verschlüsselung des Hashwerts
um solche für sichere elektronische Signaturen handeln. ... Folgende Hashverfahren werden als sicher anerkannt:
1. RIPEMD-160
2. Funktion SHA-1.
Diese Hashwerte sind bis 31.Dezember 2005 für den Einsatz bei elektronischen Signaturen als sicher anzusehen. Diesen Hashverfahren sind andere
Verfahren gleichgestellt, die zumindest die gleiche Sicherheit aufweisen und
von einer Bestätigungsstelle als solche anerkannt und veröffentlicht wurden.
Im Zuge dieser Diplomarbeit werden die erwähnten Verfahren noch ausführlich behandelt.
2
Kryptographische Hashfunktionen
Dieses Kapitel enthält die Definition kryptographischer Hashfunktionen und ihre wichtigsten Eigenschaften. Außerdem wird ihre Funktionsweise sowie der Einsatz in Zusammenhang mit der digitalen Signatur erläutert. Weiters werden Kollisionen und statistische Angriffsmethoden und deren Auswirkung auf die Forderung nach Gleichverteilung
der Hashwerte anhand eines Beispiels erklärt. Abschließend wird ein Überblick der verschiedenen Kategorien eingesetzter Hashfunktionen und eine kurze Zusammenfassung
der historischen Entwicklung gegeben.
2.1
Die Notwendigkeit des Einsatzes von Hashfunktionen in der digitalen Signatur
Hashfunktionen werden in der Informatik seit langer Zeit verwendet und verkörpern
eine einfache, wie auch geniale Idee um eine Leistungssteigerung zu erreichen. So werden sie beispielsweise bei der Arbeit mit Datenbanken eingesetzt. Grundsätzlich stellt
sich in diesem Fall das Problem, dass eine große Datenbank, bei der pausenlos neue
Datensätze hinzugefügt werden, nicht ständig sortiert werden kann, da ansonsten der
Rechner seine gesamte Rechenleistung auf das Sortieren verwenden müsste. Andererseits müssen laufend bereits eingegebene Datenblätter gesucht werden. Diese Suche
geht zwar wesentlich schneller, als das Sortieren der gesamten Datenbank, wird jedoch
so häufig gefordert, dass auch in diesem Fall der Rechner ständig beschäftigt wäre.
7
2. Kryptographische Hashfunktionen
8
Eine Lösung dieses Problems ist die Bildung von Hashwerten. Das bedeutet, dass
während der Dateneingabe bereits eine Quersumme“ (beispielsweise durch Addition
”
aller Bytes) gebildet wird. Zusätzlich zu der Datenbank selbst wird eine so genannte
Hashtabelle mit 256 Einträgen angelegt. Für jede mögliche Quersumme werden die
dazugehörigen Einträge dann dort abgelegt. Bei der Suche nach einem bestimmten Datensatz wird dann zuerst dessen Quersumme gebildet und der dazugehörige Eintrag in
der Hashtabelle gesucht, wo dann die angegebenen Verweise durchforstet werden. Bei
vielen Einträgen ist die Quersumme gleichverteilt. Das bedeutet, dass jede Quersumme
in etwa gleich oft vorkommt. Dadurch ist die Suche im beschriebenen Beispiel 256 mal
schneller als ohne Hashtabelle.
Dies ist allerdings ein sehr einfaches Beispiel für die Verwendung von Hashfunktionen.
Die in der Kryptographie angewandten Einweg-Hashfunktionen unterscheiden sich von
Hashfunktionen der Informatik beträchtlich, da sie ganz anderen Anforderungen genügen
müssen. Dennoch gibt es auch einige Gemeinsamkeiten. So werden Hashfunktionen in
der Kryptographie ebenso zur Leistungssteigerung eingesetzt, bieten aber zusätzlich
noch eine Steigerung der Sicherheit der digitalen Signatur. Außerdem bilden kryptographische Hashfunktionen ebenso eine Abbildung eines umfangreicheren Klartextes,
wie das durch die Bildung einer Quersumme der Fall ist. Durch die Kompressionseigenschaft (siehe Kapitel 2.3) ist diese Abbildung, genau wie bei Hashfunktionen in der
Informatik, nicht injektiv1 was zu Kollisionen führen wird (siehe Kapitel 2.6).
2.2
Einweg-Hashfunktionen
Die Nomenklatur für Einweg-Hashfunktionen ist vielfältig. Sie werden in der Literatur auch Kompressionsfunktionen, Konzentrationsfunktionen, Message-Digest, kryptographische Prüfsumme, Message Integry Check (MIC) und anders genannt. In dieser
Arbeit wird der Begriff Einweg-Hashfunktion oder kurz Hashfunktion verwendet.
Um zu verstehen, was Einweg-Hashfunktionen sind, muss zuerst der Begriff Einwegfunktion klar sein, den [3] sehr gut definiert.
1
In der Mathematik heißt eine Funktion injektiv oder eindeutig, wenn nie zwei verschiedene Elemente auf das gleiche Element abgebildet werden.
2. Kryptographische Hashfunktionen
9
Definition 2.1 Einwegfunktion f
Einwegfunktionen sind Funktionen f , die sich leicht berechnen lassen, deren Umkehrung f −1 jedoch nicht, oder nur sehr schwer (d.h. mit nicht vertretbarem Aufwand) zu
berechnen ist, insbesondere auch dann, wenn die Funktion f öffentlich bekannt ist.
In der Mathematik gibt es viele Einwegfunktionen. Ein Beispiel aus dem kryptographischen Bereich für eine Einwegfunktion ist die RSA Verschlüsselung, welche im Anhang
(A) erläutert ist.
Laut [3] definiert sich eine Einweg-Hashfunktion folgendermaßen.
Definition 2.2 Einweg-Hashfunktion h
Einweg-Hashfunktionen sind Einwegfunktionen, die beliebig lange Klartexte auf einen
Hashwert fester Länge abbilden.
Diese Abbildung ist nicht injektiv, da der Hashwert meist kürzer ist als der Klartext.
Folglich werden auf einen Hashwert viele Klartexte abgebildet.
Die mathematische Formulierung für eine Hashfamilie sieht folgendermaßen aus:
Definition 2.3 Hashfamilie
Eine Hashfamilie wird durch folgende Komponenten beschrieben:
• X, endliche oder unendliche Menge von Klartexten,
• Y , endliche Menge aller Hashwerte, |Y | ≤ |X|,
• S, endlicher Schlüsselraum,
• H = {hs |s ∈ S}, endliche Menge von Hashfunktionen hs : X → Y .
2. Kryptographische Hashfunktionen
10
Der Ablauf bei der Bildung von Hashwerten läuft grundsätzlich nach einem bestimmten
Schema ab, welches in Abbildung 2.1 ohne Verwendung des Schlüssels s dargestellt ist.
Die meisten Einweg-Hashfunktionen benutzen eine Einwegfunktion f , die Eingaben
fester Länge m auf einen Hashwert h(x) = y der Länge n abbildet. Eine Eingabe x
beliebiger Länge wird in k Teile x1 , . . . , xk der Länge m zerlegt. Die Einwegfunktion f
wird auf diese Blöcke xi dann in folgender Weise angewendet:
y0 = 0
yi = f (xi , yi−1 ) ∀ i = 1, 2, . . . , k
Der letzte Wert h(x) =: yk entspricht dann dem Hashwert von x.
Abbildung 2.1: Ablauf bei der Bildung von Hashwerten
2. Kryptographische Hashfunktionen
2.3
11
Eigenschaften kryptographischer Hashfunktionen
Damit Einweg-Hashfunktionen in der digitalen Signatur sinnvoll eingesetzt werden
können müssen sie folgende Eigenschaften erfüllen.
1. Kompression - Aus einer umfangreichen Information wird eine komprimierte berechnet. Die Hashfunktion h bildet den Text x beliebiger Länge auf einen endlichen Hashwert h(x) = y ab.
2. Einfachheit der Berechnung - Wenn die Hashfunktion h und der Text x gegeben
sind, so muss die Berechnung des Hashwerts h(x) einfach sein.
3. Bei gegebenem Hashwert ist es mit vernünftigem Aufwand nicht möglich, eine
Bytefolge zu konstruieren, die diesen Hashwert ergibt - Für einen vorgegebenen
Hashwert y muss es hinreichend schwierig sein einen Text x mit h(x) = y zu
finden. Eine Funktion die diesen Anforderungen entspricht wird auch preimage
resistant hash function [6] genannt.
4. Bei gegebener Bytefolge x ist es mit vernünftigem Aufwand nicht möglich, eine
zweite Bytefolge x0 mit gleichem Hashwert h(x) = h(x0 ) zu finden. Weist eine
Funktion diese Eigenschaft auf so wird sie auch als second preimage resistant
hash function [6] bezeichnet.
5. Kollisionsresistenz - Es soll mit vernünftigem Aufwand nicht möglich sein zwei
unterschiedliche Texte x, x0 zu finden, die den selben Hashwert haben, so dass
h(x) = h(x0 ).
6. Zufälligkeit des produzierten Hashwerts - Die von einer Hashfunktion produzierte
Sequenz muss, unter der Annahme einer ebensolchen Verteilung der Klartexte,
als Realisierung unabhängiger identisch gleichverteilter Zufallsvariablen angesehen werden können (identically independent distributed (i.i.d.) uniform), da ansonsten Teilmengen existieren, welche die Punkte 3-5 dieser Liste nicht mehr
erfüllen. Diese Phänomen ist in Abbildung 2.2 dargestellt. Außerdem muss die
Hashfunktion jede einfache Ordnung (insbesondere lineare Strukturen) zerstören,
2. Kryptographische Hashfunktionen
12
damit durch Strukturen im Klartext keine Möglichkeit besteht auf die Beschaffenheit des dazugehörigen Hashwerts zu schließen und umgekehrt.
In der in Abbildung 2.2 dargestellten Situation bildet eine Hashfunktion
texte auf nur
1
10
9
10
der Klar-
der möglichen Hashwerte ab. Dadurch kann ein Angreifer viel leichter
einen zweiten Klartext finden, der auf den selben Hashwert abgebildet wird, da 90% der
Texte auf eine sehr kleine Teilmenge der Hashwerte abgebildet werden. Noch einfacher
ist das Finden einer Kollision.
Abbildung 2.2: Mögliche Aufteilung der Gesamtmengen, wenn die Hashwerte nicht
gleichverteilt generiert werden.
Auf Kollisionen wird in Kapitel 2.6 noch ausführlich eingegangen. Zuerst werden jedoch die Vorteile der Verwendung von Einweg-Hashfunktionen in der digitalen Signatur
erläutert. Dazu ist es sinnvoll den Signaturablauf ohne Hashfunktionen zu betrachten
und ihn mit dem Ablauf unter Bildung eines Hashwerts zu vergleichen.
2.4
Unterschriften mit asymmetrischer
Kryptographie
Asymmetrische Verfahren dienen in der Kryptographie generell zur Verschlüsselung.
Dabei wird der Klartext mit dem öffentlichen Schlüssel der Person, an die das Dokument übermittelt wird, verschlüsselt oder chiffriert. Anschließend wird der Geheimtext
mit Hilfe des privaten Schlüssels dieser Person entschlüsselt oder dechiffriert. Bei der
Signatur eines Dokumentes werden die Schlüssel in vertauschter Weise eingesetzt (siehe
2. Kryptographische Hashfunktionen
13
Abbildung 2.3). Das bedeutet, der Sender verwendet seinen privaten Schlüssel um den
Klartext zu dechiffrieren. Das so entstandene Dokument ist natürlich nicht mehr lesbar,
kann aber jederzeit mit dem öffentlichen Schlüssel des Senders wieder chiffriert und somit lesbar gemacht werden. Die Signatur besteht hierbei darin, das das Dokument nur
lesbar wird, wenn auch wirklich der private Schlüssel des Senders zur Dechiffrierung
verwendet wurde. Da niemand anderer zu diesem privaten Schlüssel Zugang hat kann
der Sender somit eindeutig identifiziert werden.
Abbildung 2.3: Unterschrift mit asymmetrischer Kryptographie
Bei der Verwendung des RSA Verfahrens wird in der Literatur die Dechiffrierung mit
dem privaten Schlüssel oft als Verschlüsselung oder Chiffrierung bezeichnet. Dieser
Sprachgebrauch ist in diesem Fall auch akzeptabel, da beim RSA Verfahren bei der
Ver- und Entschlüsselung die gleichen mathematischen Operationen durchgeführt werden (siehe Anhang A). Jedoch ist es sehr wichtig, hier genau zu unterscheiden, wenn
Chiffrierung und Dechiffrierung verschiedenen Algorithmen entsprechen. Weiters ist
aus diesem Beispiel erkennbar, dass sich nicht jedes Verfahren zur Erstellung einer digitalen Signatur eignet. Grundvorrausetzung für die Eignung ist, dass ein beliebiger
2. Kryptographische Hashfunktionen
14
Text, also auch Klartext, dechiffriert werden kann. Außerdem müssen die Operation
der Chiffrierung und Dechiffrierung austauschbar sein.
Laut [7] war RSA das erste asymmetrische Verfahren, dass sich zur Erstellung digitaler Signaturen eignete. Bei dieser Methode sind alle Sicherheitsanforderungen an die
digitale Signatur (siehe Kapitel 1.4.1) erfüllt. Jedoch hat sie noch einige gravierende
Nachteile, die von [7] treffend zusammengefasst werden:
1. Asymmetrische Verfahren sind außerordentlich langsam. Umfangreiche Dokumente können damit nicht unterzeichnet werden.
2. Das unterschriebene Dokument ist zunächst nicht lesbar, es muss zeitaufwendig
mit dem öffentlichen Schlüssel chiffriert werden. In der Praxis wird der unterzeichnete Text daher meist als lesbarer Text kursieren, dessen Unterschrift nicht
mehr überprüfbar ist. Die Gefahr nachträglicher Manipulation ist hoch.
3. Beim Unterzeichnen fremder Dokumente ist ein Angriff mit ausgewähltem Geheimtext auf RSA möglich (siehe Anhang A). Zum Signieren sollte man also ein
anderes Schlüsselpaar verwenden als zur Schlüsselübermittelung.
2.5
Unterschriften mit asymmetrischer
Kryptographie und Hashfunktionen
Die Nachteile der beschriebenen Methode lassen sich beheben, indem sie nicht auf den
Klartext selbst angewendet wird, sondern nur auf den Hashwert des Textes. Dieser
wird durch die Anwendung einer Einweg-Hashfunktion auf den Klartext erzeugt. Der
Hashwert wird anschließend mit dem privaten Schlüssel dechiffriert. Dieser Vorgang
unterscheidet sich von der ersten Methode nur insofern, dass alle Operationen auf den
Hashwert und nicht den gesamten Text angewendet werden (siehe Abbildung 2.4).
2. Kryptographische Hashfunktionen
15
Durch diese Methode ergeben sich folgende Vorteile:
1. Hashwerte sind in der Regel wesentlich kürzer als der Klartext. Daher kostet die
Anwendung des RSA Verfahrens auf die Hashwerte wenig Zeit.
2. Hashwerte, die durch Einweg-Hashfunktionen erzeugt werden, sind nicht voraussagbar. Folglich ist kein Angriff mit ausgewähltem Geheimtext möglich.
3. Das Dokument ist für jedermann lesbar und bei Kenntnis des öffentlichen Schlüssel
ist die Signatur jederzeit überprüfbar.
Da jedoch die Bildung eines Hashwerts nicht injektiv ist, können Kollisionen entstehen.
Abbildung 2.4: Signatur mit asymmetrischer Kryptographie und Einweg-Hashfunktion
2. Kryptographische Hashfunktionen
2.6
16
Kollisionen
Kollisionen entstehen dann, wenn zwei unterschiedliche Nachrichten x, x0 mit x 6= x0 auf
den selben Hashwert h(x) = h(x0 ) abgebildet werden. Obwohl die Anzahl der möglichen
Nachrichten unendlich ist, ist die Anzahl der möglichen Hashwerte beschränkt. Dies
ergibt sich dadurch, dass verschiedene und unterschiedlich lange Nachrichten auf einen
Wert mit fixer Länge abgebildet werden, was der Kompressionseigenschaft (siehe Kapitel 2.3, Punkt 1) von Hashfunktionen entspricht. Beim secure hash algorithm (SHA-1),
der in Kapitel 3.3 erläutert wird, beträgt diese Länge beispielsweise 160 Bit. Daraus
folgt, dass es bei diesem Algorithmus 2160 mögliche Hashwerte gibt.
Um Kollisionen zu beschreiben hilft die Analogie des Sortierregals [1], die in Abbildung
2.5 dargestellt ist. Angenommen es existiert ein Sortierregal mit 2160 Fächern, für jeden
möglichen Hashwert ein Fach. Das nullte Fach entspricht dem Hashwert 00 00 . . . 00,
das erste dem Hashwert 00 00 . . . 01, usw. bis zu letzten Fach für den Hashwert ff ff . . .
ff. Jetzt beginnt man damit Nachrichten mit der Einweg-Hashfunktion zu bearbeiten.
Beispielsweise ergibt die 1Byte-Nachricht 00 den Hashwert2 :
5b a9 3c 9d b0 cf f9 3f b5 21 d7 42 0e 43 f6 ed a2 78 4f
Aus diesem Grund wird die Nachricht in dem Sortierregal in dem Fach 5b a9 . . . 4f
abgelegt. Dieser Vorgang wird nun für 2160 verschiedene Nachrichten durchgeführt. Die
einfachste Folge dieser Nachrichten wäre: 00, 01, 02 . . . ff, 01 00, 01 01, . . . ff ff, 01 00 00
usw. Angenommen jede dieser Nachrichten produziert einen anderen Hashwert, was in
der Praxis wahrscheinlich nicht der Fall wäre (siehe auch Kapitel 2.7.3.1), so wären
nach 2160 Nachrichten alle Fächer des Sortierregals gefüllt, wobei jede Nachricht in ein
eigenes Fach einsortiert wurde.
Nun wird eine völlig neue Nachricht konstruiert z.B. Daniel, I sold 4 presses to Satomi.
”
Ship immediately.“. Diese 424-Bit-Nachricht gehört nicht zu denen, die bereits untersucht wurden. Die Nachricht hat den Hashwert
46 73 a5 85 89 58 44 ac 5b e8 48 7a cd 12 63 f8 c1 5a
2
Dieser Hashwert wurde aus [1] entnommen
2. Kryptographische Hashfunktionen
17
und gehört somit in das zugehörige Fach 46 73 . . . 5a des Sortierregals. Aber dieses
Fach ist, genauso wie alle anderen, bereits belegt. Das bedeutet, dass zwei verschiedene
Nachrichten (x, x0 ) den selben Hashwert besitzen (h(x) = h(x0 )) und somit kollidieren.
Abbildung 2.5: Kollisionen bei Hashfunktionen nach [1]
Das ist nun eine zufällige Kollision. Wenn allerdings ein Hash-Algorithmus vorhersagbar
genug wäre, dass ein Angreifer eine Nachricht geringfügig ändern und dennoch den
selben Hashwert produzieren könnte, so wäre der Algorithmus geknackt. Kollisionen
bieten jedoch generell eine Angriffsmöglichkeit auf Hashfunktionen.
2.7
Angriffsarten auf Hashfunktionen
Die Betrachtung der unterschiedlichen Angriffsarten auf Hashfunktionen erlaubt ein
besseres Verständnis des Aufbaus der einzelnen Algorithmen, da die Funktionen darauf ausgerichtet sind den gängigen Attacken zu trotzen. Die Resistenz einer Hashfunktion gegenüber bestimmten Attacken erlaubt eine (teilweise) Einschätzung der
Sicherheit. Der folgende Abschnitt beschreibt die wichtigsten Attacken auf angepasste
Hashfunktionen (siehe Kapitel 2.8.3). Es existieren viele weitere Methoden und Variationen der angegebenen Attacken, wobei einige die Hashfunktion selbst und andere
spezifische Details bestimmter Hashfunktionen attackieren.
2. Kryptographische Hashfunktionen
2.7.1
18
Der Preimage-Angriff
Als Preimage-Angriff bezeichnet man den Versuch zu einem gegebenen Hashwert y
einen Text x zu finden, so dass h(x) = y gilt. In der Praxis spielt diese Attacke jedoch
keine wichtige Rolle, da das Auffinden eines beliebigen Textes keine Relevanz für einen
Angreifer hat.
2.7.2
Der Second-Preimage-Angriff
Bei dieser Art des Angriffs versucht der Angreifer zu einer gegebenen Nachricht x
mit dem Hashwert h(x) eine zweite Nachricht x0 zu finden, die den selben Hashwert
liefert (h(x) = h(x0 )). Diese Attacke benötigt bei einem idealen Hash-Algorithmus
(i.i.d. uniform) jedoch durchschnittlich 2n Operationen um eine Kollision zu entdecken,
wobei n die Länge des Hashwerts angibt. 2n ist also die durchschnittliche Wartezeit,
die benötigt wird, um einen Hashwert zu finden, der einem bestimmten (vorgegebenen)
entspricht. Diese Situation lässt sich durch die geometrische Verteilung beschreiben, die
wie folgt lautet:
fg (k) = (1 − p)k−1 · p,
k ∈ N,
0<p<1
(2.1)
Da von einer Gleichverteilung der 2n möglichen Hashwerte ausgegangen wird, ist die
Wahrscheinlichkeit des Auftretens für jeden Hashwert p =
1
.
2n
Die durchschnittliche
Wartezeit lässt sich anhand des Erwartungwerts der geometrischen Verteilung errechnen.
Definition 2.4 Erwartungswert einer diskreten Verteilung
Gegeben sei eine diskrete Verteilung mit der Zufallsvariable X mit Wertebereich WX =
{x1 , x2 , . . .} und der Verteilungsfunktion f . Dann heißt
E[X] =
∞
X
xk · f (xk )
k=1
Erwartungswert der Zufallsvariable X bzw. der Verteilung f .
2. Kryptographische Hashfunktionen
19
Aus der allgemeinen Definition des Erwartungswerts ergibt sich für die geometrische
Verteilung mit xk = k nun folgendes:
∞
X
E[X] =
k · (1 − p)k−1 · p
k=1
∞
X
= p·
k · (1 − p)k−1
(2.2)
k=1
|
{z
}
1. Ableitung der T aylorreihe
= p·
1
1
=
2
(1 − (1 − p))
p
(2.3)
Wird in Gleichung (2.2) die erste Ableitung der Taylorreihe (2.4) mit z = (1 − p)
eingesetzt, so ergibt sich für den Erwartungswert E[X] = p1 .
Zur Erläuterung der Vorgangsweise:
∞
X
1
z =
Taylorreihe:
1−z
k=0
Wenn nun p =
1
2n
k
1. Ableitung nach z:
∞
X
k · z k−1 =
k=1
1
(1 − z)2
(2.4)
in Gleichung(2.3) eingesetzt wird, ergibt sich die bereits erwähnte
durchschnittliche Wartezeit von 2n . Weitaus effizienter als diese Angriffsart ist jedoch
der so genannte Geburtstagsangriff.
2.7.3
Der Geburtstagsangriff
Hierbei versucht der Angreifer Kollisionen zu finden, indem er zwei beliebige Nachrichten x, x0 sucht, die den selben Hashwert liefern. Der Name dieser Attacke kommt daher,
dass sie auf dem Geburtstagsparadoxon basiert, welches nachstehend beschrieben wird.
2.7.3.1
Das Geburtstagsparadoxon
Es lassen sich zwei Fragestellungen unterscheiden:
Frage 1: Auftreten eines bestimmten Geburtstags bei n Personen
Frage 2: Auftreten einer Kollision; d.h. mehrere Personen haben am selben Tag Geburtstag
2. Kryptographische Hashfunktionen
20
Wobei Frage 1 der Vorgangsweise bei einem second preimage Angriff und Frage 2 der
Vorgangsweise bei einem Geburtstagsangriff entspricht.
Erfolgswahrscheinlichkeit bei Frage 1
Wie viele Leute müssen sich in einem Raum aufhalten, so dass mit gegebener Wahrscheinlichkeit von 50% eine Person heute Geburtstag hat?
Um die Frage zu beantworten, ist es notwendig eine Verteilungsannahme zu machen
Annahme (1): Die Geburtstage sind gleichverteilt
xi . . . Geburtstag der i-ten Person, xi ∈ {1, . . . , 365}
p := P [xi = l] =
1
365
∀ l ∈ {1, . . . , 365}
Annahme (2): xi und xj sind unabhängig voneinander
P [xi = l ∧ xj = k] = p2
∀ (l, k) ∈ {1, . . . , 365}2
∀ (i, j) ∈ {1, . . . , n}2
Dann gilt:
pn = P [Kollision] = P [mindestens eine Person hat am Tag x Geburtstag]
= P [x1 = x ∨ x2 = x ∨ . . . ∨ xn = x]
= 1 − P [alle Personen haben nicht am Tag x Geburtstag]
= 1 − P [x1 6= x ∧ x2 6= x ∧ . . . ∧ xn 6= x]
364 n
> 0.5
= 1−
365
(2.5)
Da von Annahme (2) ausgegangen wird, darf in (2.5) eine Multiplikation der Wahrscheinlichkeiten durchgeführt werden und durch Annahme (1) gilt P [xi 6= x] =
Aus (2.5) lässt sich n berechnen, indem man die Gleichung
nach n auflöst und n ≥ 253 erhält.
364
365
n
< 0.5
364
.
365
2. Kryptographische Hashfunktionen
21
Erwartete Wartezeit bei Frage 1
Eine weitere Herangehensweise um die Sicherheit einer Hashfunktion zu analysieren ist
die Berechnung der Wartezeit, bis eine Kollision sicher auftritt (siehe Kapitel 2.7.2). Für
das Geburtstagsproblem lautet die Fragestellung also: Wie viele (n) Personen müssen
durchschnittlich gewählt werden bis eine davon am Tag x Geburtstag hat?
Um eine Lösung zu finden wird wiederum von Annahme (1) und Annahme (2) ausgegangen.
Sei W die Wartezeit bis eine Person am Tag x Geburtstag hat mit W = {1, 2, 3, . . .}.
Dies entspricht wieder der geometrischen Verteilung, die bereits in Kapitel 2.7.2 diskutiert wurde. Somit gilt: P [W = k] = q k−1 · p mit p := P [xk = x] =
q := P [x1 6= x] = . . . = P [xk−1 6= x] =
364
.
365
1
365
und
Der Erwartungswert E[W ] lässt sich laut
Definition (2.4) also wie folgt berechnen:
E[W ] =
∞
X
k · q k−1 · p =
k=1
1
1
= 1 = 365
p
365
Die durchschnittliche Wartezeit zur ersten Kollision beträgt somit 365 Versuche.
Erfolgswahrscheinlichkeit bei Frage 2
Wie viele Leute müssen in einem Raum sein, so dass mit gegebener Wahrscheinlichkeit
von 50% mindestens zwei Personen am gleichen Tag Geburtstag haben?
Um die Frage zu beantworten wird wieder von Annahme (1) und Annahme (2) ausgegangen. Sei dazu n die Zahl der Personen.
pn = P [Kollision]
= P [mind. zwei der Geburtstage (x1 , . . . , xn ) fallen auf den selben Tag]
= P [x1 = x2 ∨ x1 = x3 ∨ . . . ∨ xn−1 = xn ]
= 1 − P [alle xi sind verschieden]
= 1 − P [x1 6= x2 ∧ x1 6= x3 ∧ . . . ∧ xn−1 6= xn )
365 · 364 · . . . · (365 − n + 1)
= 1−
365n
n−1
Y
i
= 1−
1−
365
i=1
(2.6)
(2.7)
2. Kryptographische Hashfunktionen
22
Da Annahme (2) vorausgesetzt wird, darf eine Multiplikation der Wahrscheinlichkeiten in (2.6) durchgeführt werden. Da diese jedoch ein sehr großes Produkt ist, ist es
sinnvoll eine Vereinfachung durchzuführen, indem man die Formel approximiert. Dazu
verwendet man die Taylor-Reihe von ex :
ex = 1 + x +
x2 x3
+
+ ...
2!
3!
(2.8)
Für x, die nahe bei 0 liegen, sind die beiden ersten Terme auf der rechten Seite der
Gleichung (2.8) viel größer als die restlichen. Daraus lässt sich schließen, dass
1+x ∼
= ex
(2.9)
i
eine gute Näherung für (2.8) darstellt. Setzt man nun x = − 365
in die Produktformel
ein, so erhält man
n−1
Y
i=1
i
1−
365
∼
=
n−1
Y
i
e− 365
i=1
1
2
n−1
= e−( 365 + 365 +...+ 365 )
1
= e− 365 ·
n·(n−1)
2
(2.10)
Der letzte Schritt ergibt sich durch die Summenformel [8, S. 16]
1 + 2 + . . . + (n − 1) =
n · (n − 1)
2
Wird das Ergebnis aus (2.10) in Gleichung (2.7) eingesetzt, so ergibt sich folgende
Formel:
1 n·(n−1)
pn ∼
= 1 − e− 365 · 2
(2.11)
Das numerische Ergebnis für Gleichung (2.11) ist ∼
= 23. Es müssen also n ≥ 23 Personen
im Raum sein, damit mindestens zwei von ihnen am selben Tag Geburtstag haben.
Die Anzahl der Tage entspricht nun 2m bei einem m-bit Hashwert. Für große n gilt
näherungsweise n ∼
=22.
m
2. Kryptographische Hashfunktionen
23
Erwartete Wartezeit bei Frage 2
Wie viele (n) Personen müssen durchschnittlich gewählt werden bis zwei Personen am
gleichen Tag Geburtstag haben?
Annahme (1) und (2) werden auch zur Berechnung der durchschnittlichen Wartezeit
auf die erste sichere Kollision getroffen. Sei W die Wartezeit auf die erste Kollision
mit W ∈ {2, 3, 4, . . . , 366} Diese Problemstellung entspricht nicht, wie in Frage 1,
der geometrischen Verteilung. Daher kann die durchschnittliche Wartezeit auch nicht
über ihren Erwartungswert berechnet werden. Deshalb wird in Folge die Herleitung der
Wahrscheinlichkeitsfunktion beschrieben.
P [W = 2] = P [Kollision tritt beim zweiten Geburtstag auf]
365
1
=
·
{z }
{z }
|365
|365
beliebig
1. Geb.=2. Geb.
P [W = 3] = P [Kollision tritt beim dritten Geburtstag auf]
365
364
2
=
·
·
{z }
{z }
{z }
|365
|365
|365
beliebig
1.6=2.
3.=1. oder 2.
..
.
P [W = k] = P [Kollision tritt beim k-ten Geburtstag auf]
365 · 364 · . . . · (365 − (k − 1) + 1)
k−1
=
·
k−1
365{z
|
}
{z }
| 365
k-1 verschiedene Geb.
k-te Geb. = Kollision
Die durchschnittliche Wartezeit lässt sich nun laut Definition (2.4) folgendermaßen
berechnen:
E[W ] =
∞
X
k=2
k · P [W = k] =
365
X
k−2
Y
k=2
l=0
365 − l
365
!
·
k · (k − 1)
365
Das numerische Ergebnis für die Fragestellung lautet E[W ] = 24, 6166.
Mit diesen einfachen Wahrscheinlichkeitsrechnungen lässt sich sehr gut feststellen, dass
es wesentlich schwieriger ist zu einem festgelegten Geburtstag ein zweites Geburtstagskind zu finden, als zwei Personen, die an einem beliebigen, gemeinsamen Tag geboren
wurden. Der Grund für diese große Differenz liegt darin, dass die Anzahl möglicher
2. Kryptographische Hashfunktionen
24
Gästepaare quadratisch, die Anzahl potenzieller Übereinstimmungen mit dem Gastgeber dagegen nur linear anwächst. Diese in der Tat paradoxe Erscheinung lässt sich, wie
sofort auffällt, auch auf Hashfunktionen übertragen. Die Anzahl der Tage eines Jahres
entspricht dann der aller möglichen 2m Hashwerte, die Gesamtzahl n aller Gäste wird
zur Anzahl der Nachrichten, die erforderlich sind, um eine bestimmte Wahrscheinlichkeit für eine Übereinstimmung zu erreichen. Eine Näherung für die 50/50-Chance bei
einer Hashfunktion mit m-Bit-Ausgabe ist somit
m
n=22
Um eine Nachricht zu finden, die einen bestimmten Hashwert ergibt, muss die Funktion
auf 2m−1 Nachrichten angewendet werden (siehe Second-Preimage-Angriff). Aber um
m
zwei Nachrichten zu finden, die denselben Hashwert ergeben , sind lediglich n = 2 2
Nachrichten erforderlich.
2.7.3.2
Der Angriff
Die folgende Vorgehensweise beschreibt, wie ein Geburtstagsangriff durchgeführt werden kann und ist aus [9] entnommen. Abbildung 2.6 stellt den Ablauf dar.
1. Alice bereitet zwei Versionen eines Vertrags vor. Der eine begünstigt Bob, wohingegen der andere ihn in den Ruin treiben würde.
2. Alice bringt an jedem Dokument einige subtile Änderungen an und berechnet für jedes so entstandene Dokument den Hashwert. Bei einem Hashwert mit
der von Länge 128 Bit müssen 264 verschiedene Varianten möglich sein. Solche
Änderungen können beispielsweise das Einfügen mehrerer Leerzeichen oder Zeilenumbrüche sein. Indem sie auf jeder von 64 Zeilen eine Änderung durchführt
oder eben nicht, kann Alice leicht 264 verschiedene Dokumente erzeugen.
3. Alice vergleicht die Hashwerte für alle Versionen der beiden Dokumente und sucht
übereinstimmende Paare. Liefert eine Hashfunktion nur einen 128-bit Wert, ist
die Wahrscheinlichkeit groß, dass sie innerhalb der 264 Versionen ein übereinstimmendes Paar findet. Sie wählt dann die zwei Dokumente, die den selben Hashwert
liefern aus.
2. Kryptographische Hashfunktionen
25
4. Alice lässt Bob nun die Vertragsversion unterschreiben, die ihn begünstigt. Sie
benutzt dazu ein Protokoll, bei dem nur der Hashwert unterzeichnet wird.
5. Zu einem späteren Zeitpunkt ersetzt Alice den von Bob unterschriebenen Vertrag
mit der Version, die er nicht unterschrieben hat. Jetzt kann sie das Gericht davon
überzeugen, dass Bob diesen Vertrag unterzeichnet hat, da er den selben Hashwert
liefert.
Abbildung 2.6: Der Geburtstagsangriff
Dieser Angriff ist in so einem Fall jedoch sehr einfach abzuwehren, indem man immer
bevor man ein Dokument signiert eine kleine, belanglose Änderung durchführt, da dann
die Hashwerte nicht mehr übereinstimmen. Es gibt Algorithmen, die es erlauben einen
Geburtstagsangiff wesentlich effizienter durchzuführen. Diese sind in [2] nachzulesen.
2. Kryptographische Hashfunktionen
2.7.4
26
Verkettungsangriffe
Diese Angriffe basieren auf der iterativen Beschaffenheit von Hashfunktionen und im
speziellen auf der Nutzung von Verkettungsvariablen (siehe Kapitel 3). Sie zielen nicht
auf die Hashfunktion h selbst, sondern vielmehr auf die interne Kompressionsfunktion
f ab. Folgendes Beispiel beschreibt, wie so ein Verkettungsangriff zustande kommen
kann.
Beispiel: Sei h eine kollisionsresistente Hashfunktion (siehe Kapitel 2.3, Punkt 5),
die einen 128-bit Hashwert produziert mit einer Kompressionsfunktion f , die als
Eingang einen 512-bit Nachrichtenblock xi und eine 128-bit Verkettungsvariable
Yi erhält und als Ausgang Yi+1 = f (xi , yi ) hat. Für eine fixe Nachricht x, die aus
10 Teilblöcken besteht (640 Bytes), sei Y = h(x).
Angenommen jemand nimmt einen der zehn Blöcke und möchte ihn ersetzen, ohne
den Hashwert H zu verändern. Wenn sich h statistisch zufällig verhält, so ist die
Anzahl solcher 512-Bit Blocks ungefähr
2512
2128
= 2384 . Jede effiziente Methode um
einen dieser 2384 Böcke zu finden, unterscheidet sich von dem Originalfall einer
Attacke auf h.
Es gibt verschiedene Arten von Verkettungsangriffen, die jedoch hier nicht behandelt
werden. Der interessierte Leser wird auf [2] verwiesen.
2. Kryptographische Hashfunktionen
2.7.5
27
Zusammenhang der Angriffe mit der Forderung nach
Gleichverteilung
Bei den Rechenbeispielen in Kapitel 2.7.3.1 wurde in allen Fällen die Annahme der
Gleichverteilung getroffen (Annahme (1)). Der Grund dafür besteht darin, dass bei
einer Gleichverteilung die Wartezeit auf eine Kollision am längsten ist. Anhand eines
einfachen Beispiels aus der Statistik soll dies nun näher erläutert werden.
Beispiel: Münzwurf
Eine Münze wird i-mal geworfen. Die beiden möglichen Ausgänge eines Münzwurfs sind
Kopf (x = K) und Zahl (x = Z). Die Frage ist nun, bei welcher Wahrscheinlichkeitsverteilung die durchschnittliche Wartezeit auf eine Kollision am längsten ist. Diese Frage
ist im Zusammenhang mit der Sicherheit von Hashfunktionen von großer Bedeutung,
wie bereits in Kapitel 2.3 erläutert wurde. Eine Kollision bedeutet in diesem Beispiel
das zweimalige Werfen des selben Symbols (also Kopf-Kopf oder Zahl-Zahl).
Sei W die Wartezeit auf das Auftreten einer Kollision mit W ∈ {2, 3}. Weiters sei
p := P [x = K] und q := P [x = Z] = 1 − p. Alle xi sind voneinander unabhängig. Es
gilt also:
P [W = 2] = P [(x1 = K ∧ x2 = K) ∨ (x1 = Z ∧ x2 = Z)]
= P [x1 = K ∧ x2 = K] + P [x1 = Z ∧ x2 = Z]
= P [x1 = K] · P [x2 = K] + P [x1 = Z] · P [x2 = Z]
= p2 + q 2 = p2 + (1 − p)2 = 2p2 − 2p + 1
P [W = 3] = 1 − P [W = 2] = 1 − (2p2 − 2p + 1) = 2p − 2p2
Anhand dieser Wahrscheinlichkeitsverteilung, lässt sich mit Hilfe des Erwartungswerts
(siehe Definition(2.4)) die durchschnittliche Wartezeit ermitteln.
E[W ] =
3
X
k · P [W = k] = 2 · P [W = 2] + 3 · P [W = 3]
k=2
= 2 · (2p2 − 2p + 1) + 3 · (2p − 2p2 ) = 2p − 2p2 + 2
(2.12)
2. Kryptographische Hashfunktionen
28
Aus dieser von p abhängigen Funktion kann nun durch Differenzieren das Maximum
(also der Wert für p bei dem die Wartezeit am längsten ist) einfach berechnen. Da
die 1. Ableitung die Steigung einer Funktion beschreibt und die Steigung in einem
Extremwert 0 ist, erhält man durch einsetzen von 0 in die Gleichung (2.13) den Wert
für p, bei dem die Wartezeit am längsten ist.
f 0 (p) = 2 − 4p
(2.13)
0 = 2 − 4p
1
p =
2
Zur Überprüfung, ob es sich bei der Extremstelle tatsächlich um ein Maximum und
kein Minimum handelt, wird auch die 2. Ableitung berechnet.
f 00 (p) = −4
Aus dem Ergebnis kann man nun erkennen, dass es sich tatsächlich um ein Maximum
handelt. Diese Erkenntnis ist nun für die Verteilung einer Hashfunktion insofern wichtig, dass falls die Verteilungsfunktion eine andere als die Gleichverteilung ist, Teilmengen im Hashraum existieren, die die Punkte 3-5 der geforderten Eigenschaften (Kapitel
2.3) nicht mehr erfüllen und somit auch nicht als sicher gewertet werden können.
2.8
Übersicht über verschiedene Arten von Hashfunktionen
Grundsätzlich können, laut [9], Hashfunktionen in zwei große Klassen unterteilt werden,
die unkeyed und die keyed Hashfunktionen. Der Unterschied besteht in den verschiedenen Eingangsparametern der Funktionen. Während bei unkeyed Hashfunktionen die
Spezifikation nur einen einzigen Parameter vorschreibt, nämlich die Nachricht selbst,
so erfordern keyed Hashfunktionen als zweiten Parameter einen, in manchen Fällen
2. Kryptographische Hashfunktionen
29
geheimen, Schlüssel. Im bisherigen Text wurde also folglich immer von unkeyed Hashfunktionen ausgegangen. Keyed Hashfunktionen, deren spezifischer Zweck die Authentifizierung von Nachrichten ist, werden auch als message authentication code (MAC)
Algorithmen bezeichnet. Da diese Art von Funktionen für diese Arbeit nicht von Bedeutung sind, wird der interessierte Leser an [2] verwiesen. Unkeyed Hashfunktionen
werden oft als modification detection code (MDC) Algorithmen bezeichnet, obwohl es
auch noch einige andere unkeyed Algorithmen gibt.
Abbildung 2.7: Einteilung der Hashfunktionen in verschiedene Kategorien
Auf Grund der Beschaffenheit der Kompressionsoperationen, welche die internen Kompressionsfunktionen beinhalten, können MDCs in verschiedene Kategorien unterteilt
werden. Hierbei gibt es drei wichtige Gruppen: Hashfunktionen basierend auf Blockchiffren, angepasste Hashfunktionen und Hashfunktionen basierend auf modularer Arithmetik. Als angepasste Hashfunktionen werden solche bezeichnet, die speziell zum Has”
hen“ entwickelt wurden, wobei vor allem die Geschwindigkeit im Vordergrund steht.
In Tabelle 2.1 sind die vermuteten Sicherheiten einiger MDCs zusammengefasst, wobei
die ersten vier Algorithmen auf Blockchiffren basieren und die weiteren vier angepasste
2. Kryptographische Hashfunktionen
30
Hashfunktionen sind. Dabei steht n für die Länge der Nachrichtenblöcke, die die jeweilige Hashfunktion als Eingang erhält und m für die Länge des von ihr produzierten
Hashwerts. Die letzten beiden Spalten geben die momentan geschätzte Anzahl der notwendigen Operationen an, die benötigt werden um second preimages bzw. Kollisionen
zu finden.
Hashfunktion
Matyas-Meyer-Oseas
MDC-2 (mit DES)
MDC-4 (mit DES)
Merkle (mit DES)
MD4
MD5
RIPEMD-128
RIPEMD-160, SHA-1
n
n
64
64
106
512
512
512
512
m
n
128
128
128
128
128
128
160
Preimage
2n
2 · 282
2109
2112
2128
2128
2128
2160
Kollision
n
22
2 · 254
4 · 254
256
220
264
264
280
Tabelle 2.1: Obergrenze der Stärke ausgewählter Hashfunktionen [2]
Die Erhöhung der Sicherheit geht meist zu Lasten der Geschwindigkeit, weshalb in der
Praxis oft Kompromisse gemacht werden müssen.
2.8.1
Hashfunktionen basierend auf modularer Arithmetik
Die Grundidee hierbei besteht darin, eine iterierte Hashfunktion zu konstruieren, wobei
die modulare Arithmetik als Basis für die Kompressionsfunktion dient. Ein wichtiger
Faktor für den Einsatz von Hashfunktionen, die auf modularer Arithmetik basieren,
ist die Möglichkeit bereits vorhandene Hard- und Software für modulare Arithmetik
wieder zu verwenden. Außerdem bieten solche Hashfunktionen eine gewisse Skalierbarkeit, die es ermöglicht das System den geforderten Sicherheitslevels anzupassen. Der
größte Nachteil ist dabei, dass die Geschwindigkeit, im Vergleich zu angepassten Hashfunktionen, gering ist. Des weiteren sind in der Vergangenheit schon einige Fehlschläge
bezüglich der Sicherheit hinzunehmen gewesen [2].
2. Kryptographische Hashfunktionen
2.8.2
31
Hashfunktionen basierend auf Blockchiffren
Hauptgrund für den Einsatz von Blockchiffren in Hashfunktionen in der Praxis ist meist
das Vorhandensein einer effizienten Blockchiffre. Diese auch als Hashfunktion zu nutzen
ist in vielen Fällen sehr kostengünstig. Der Gedanke dabei ist, dass eine gute Blockchiffre als Bauteil für die Erzeugung einer Hashfunktion, die vielseitig einsetzbar ist,
dienen kann. So konstruierte Hashfunktionen gelten, wenn man von bestimmten idealen Eigenschaften der darunter liegenden Blockchiffre ausgeht, als nachweisbar sicher“
”
[2]. Dennoch ist zu beachten, das Blockchiffren nicht die Eigenschaften von Zufallsfunktionen aufweisen und in der Praxis noch weitere Regelmäßigkeiten oder Schwachstellen
besitzen. Zusammenfassend lässt sich sagen, dass zwar verschiedene Bedingungen, die
erfüllt sein müssen bekannt sind, es aber trotzdem noch unklar ist, welche exakten
Anforderungen eine Blockchiffre erfüllen muss, um eine sichere Hashfunktion zu konstruieren. Daher sind, aus der Perspektive der digitalen Signatur betrachtet, angepasste
Hashfunktionen weitaus interessanter.
2.8.3
Angepasste Hashfunktionen
Angepasste Hashfunktionen, sind Hashfunktionen, die speziell für den expliziten Zweck
des Hashens“, unter dem Gesichtspunkt der Leistungsoptimierung, designed wurden,
”
ohne gezwungen zu sein existierende Systemkomponenten, wie Blockchiffren oder modulare Arithmetik, wieder zu verwenden. Diejenigen, die in der Praxis die größte Aufmerksamkeit erlangt haben, basieren alle auf dem MD4 Algorithmus. MD4 wurde speziell für die Softwareimplementierung auf 32-bit Maschinen entwickelt. Sicherheitsanforderungen motivierten kurz danach das Design von MD5, als eine sicherere Variante
von MD4. Andere wichtige Nachfolgevarianten sind SHA-1, die Hashfunktion RIPEMD
und die verschärften Varianten RIPEMD-128 und RIPEMD-160. Um einen Einblick in
die historische Entwicklung dieser Hashfunktionen zu geben, werden kurz die wichtigsten Schritte dargestellt.
2. Kryptographische Hashfunktionen
32
MD2: Ron Rivest entwickelte einen Hash-Algorithmus und nannte ihn message digest (MD), was dem Sinn nach zusammengefasste Nachricht“ bedeutet. Dann
”
verbesserte er diese erste Version und nannte die folgende Generation MD2. Sie
berechnet einen 128 Bit langen Hashwert. MD2 war weit verbreitet, aber im
Laufe der Zeit wurden Sicherheitsmängel entdeckt. Der einzige bisher bei RSA
Labatories bekannte kryptanalytische Angriff auf MD2 wurde 1995 gefunden [7].
Bei Weglassen der an den Text angehängten Prüfsumme lässt sich eine Kollision
konstruieren. Heute wird MD2 noch zusammen mit MD5 in PEM-Protokollen
benutzt.
MD4: Nachdem die Schwachstellen von MD2 offensichtlich wurden, suchte Ron Rivest nach einem Algorithmus, der sowohl sicherer als auch schneller sein sollte wie
MD2. Nachdem sich MD3 als Reinfall entpuppte [1], folgte MD4. Der Algorithmus produziert ebenfalls einen 128 Bit langen Hashwert. Nach der Einführung
des Algorithmus wurden die letzten drei von insgesamt vier Runden von Bert
den Boer und Antoon Bosselars kryptanalysiert. Ralph Merkle griff die anderen beiden Runden erfolgreich an. Obwohl diese Angriffe nicht auf den ganzen
Algorithmus erweitert werden konnten, verbesserte Rivest das Verfahren.
MD5: MD5 ist eine verbesserte Version von MD4. Der Algorithmus ist zwar komplexer
als MD4, arbeitet aber grundsätzlich nach einem ähnlichen Prinzip und erzeugt
ebenfalls einen Hashwert mit einer Länge von 128 Bit. Im Laufe der letzten
Jahre haben Forschungen potentielle Schwachstellen identifiziert. MD5 wurde
nicht gebrochen und es wurden auch keine Kollisionen gefunden. Stattdessen
sind einige Interna des Algorithmus verletzlich [1].
SHA-1: SHA wurde von NIST in Zusammenarbeit mit der NSA entwickelt. Der SHA-1
Algorithmus ist dem von MD5 sehr ähnlich. SHA-1 enthält jedoch stärkere innere
Komponenten und produziert einen längeren Hashwert (160 Bit). SHA-1 hat
die Kryptanalysen bestanden und wird in der kryptographischen Gemeinschaft
empfohlen.
2. Kryptographische Hashfunktionen
33
RIPEMD-160: RIPEMD wurde für das Projekt RIPE der Europäischen Union entwickelt. Der Algorithmus ist eine Variante von MD4 und wurde mit dem Ziel
entwickelt bekannten kryptanalytischen Angriffen zu widerstehen. RIPEMD-128
produziert einen 128 Bit langen Hashwert wohingegen RIPEMD-160 einen 160
Bit langen Hashwert liefert. Zusammen mit SHA-1 gilt er gegenwärtig als einer
der wenigen Algorithmen, gegen die keine Angriffe bekannt sind. Er wird von
Insidern als (noch) über lange Zeit zuverlässig eingeschätzt [7].
3
Detailbeschreibung der
Hashfunktionen, die in der
österreichischen Signaturverordung
empfohlen werden
Dieses Kapitel enthält eine ausführliche Beschreibung der Hashfunktionen MD4, MD5,
SHA-1 und RIPEMD-160 mit den detaillierten Algorithmen und den jeweiligen Sicherheitslücken bei MD4 und MD5.
3.1
MD4
MD4 ist eine 128-bit Einweg-Hashfunktion, die von Ron Rivest entworfen wurde. Das
ursprüngliche Designziel von MD4 war, dass um den Algorithmus zu brechen, ein hoher
Brute-Force Aufwand nötig sein sollte. Ron Rivest beschreibt in [10] seine Entwurfsziele
folgendermaßen:
Sicherheit: Es ist vom Berechnungsaufwand her undurchführbar, zwei Nachrichten mit gleichem Hashwert zu finden. Es gibt keinen effizienteren Angriff
als Brute-Force.
Direkte Sicherheit: Die Sicherheit von MD4 beruht auf keinerlei Annahmen,
wie etwa der Schwierigkeit der Faktorisierung.
34
3. Detailbeschreibung der Hashfunktionen
35
Geschwindigkeit: MD5 eignet sich für schnelle Softwareimplementierungen.
Der Algorithmus benutzt nur einfache Bitmanipulationen mit 32-bit Operanden.
Einfachheit und Kompaktheit: MD4 ist so einfach wie möglich und benutzt
keine großen Datenstrukturen oder ein kompliziertes Programm.
Das Auffinden verschiedener Nachrichten, die den selben Hashwert liefern, sollte ungefähr 264 Operationen benötigen. Eine Nachricht zu finden, die einen bestimmten
Hashwert liefert, sollte 2128 Operationen erfordern. Es ist bekannt, dass MD4 diese
Ziele nicht erreicht hat [2]. So wurden beispielsweise Kollisionen in 220 Durchgängen
gefunden, wie auch aus Tabelle 2.1 hervorgeht. Aus diesem Grund ist der Einsatz von
MD4 als kollisionsresistente Hashfunktion nicht empfehlenswert. Dennoch ist es sinnvoll, sich mit dem Algorithmus von MD4 genauer auseinander zusetzten, da eine Reihe
wichtiger kryptographischer Algorithmen, die heute eingesetzt werden, auf ihm beruhen. In Tabelle 3.1 ist die Notation, die zur Beschreibung des Algorithmus mit der
jeweiligen Bedeutung angeführt.
Notation
u, v, w
0x674301
+
u ←- s
u
uv
u∨v
u⊕v
f (u, v, w)
g(u, v, w)
h(u, v, w)
(X1 , . . . , Xj ) ←
(Y1 , . . . , Yj )
Bedeutung
Variablen, die einen 32-bit Wert repräsentieren
hexadezimaler 32-bit Integer (least significant Byte: 01)
Addition modulo 232
Ergebnis der Verschiebung von u nach links um s Positionen
bitweises Komplement
bitweises UND
bitweises ODER
bitweises EXKLUSIV ODER
uv ∨ uw
uv ∨ uw ∨ vw
u⊕v⊕w
gleichzeitige Zuweisung (Xi ← Yi ),
wobei (Y1 , . . . , Yj ) vorher ausgewertet wird
Tabelle 3.1: Notation für MD4 [2]
Der Algorithmus besteht aus insgesamt vier Hauptstufen. Nach einigen Vorbereitungsschritten verarbeitet MD4 den Eingabetext x, in Blöcken der Länge 512 Bit jeweils
aufgeteilt in 16 Teilblöcken der Länge 32 Bit.
3. Detailbeschreibung der Hashfunktionen
36
Eingang: Bitfolge x mit der Länge b ≥ 0
Ausgang: 128-bit Hashwert von x
Folgende Liste erläutert die einzelnen Schritte bei der Verarbeitung der Nachricht.
1. Definition der Konstanten
Definition von vier 32-bit langen Verkettungswerten:
h1 = 0x67452301
h2 = 0xefcdab89
h3 = 0x98badcfe
h4 = 0x10325476
Definition der 32-bit Additionskonstanten für alle drei Runden:
y[j] = 0 für 0 ≤ j ≤ 15
y[j] = 0x5a827999 für 16 ≤ j ≤ 31
y[j] = 0x6ed9eba1 für 32 ≤ j ≤ 47
Definition der Reihenfolge der Eingangszeichen für alle drei Runden (jeweils alle
Werte von 0 bis 15):
z[0 . . . 15] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
z[16 . . . 31] = [0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15]
z[32 . . . 47] = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]
Definition der Anzahl der Bits für die Verschiebung nach links für alle drei Runden:
s[0 . . . 15] = [3, 7, 11, 19, 3, 7, 11, 19, 3, 7, 11, 19, 3, 7, 11, 19]
s[16 . . . 31] = [3, 5, 9, 13, 3, 5, 9, 13, 3, 5, 9, 13, 3, 5, 9, 13]
s[32 . . . 47] = [3, 9, 11, 15, 3, 9, 11, 15, 3, 9, 11, 15, 3, 9, 11, 15]
2. Vorbereitung
Zuerst wird die Nachricht X so aufgefüllt, dass die Länge einem Vielfachen von
512 Bit entspricht. Zum Auffüllen wird ein einzelnes Bit mit dem Wert 1 an das
Ende der Nachricht angehängt. Dann werden so viele Bits (r − 1 ≥ 0) mit dem
Wert 0 angehängt, so dass sich eine Bitlänge ergibt, die einem Vielfachen von 521
minus 64 Bit ergibt. Dann wird eine 64-bit Darstellung der Länge der Nachricht
3. Detailbeschreibung der Hashfunktionen
37
b (mit dem least significant Block zuerst) angehängt. Diese Schritte bringen die
Länge der Nachricht auf ein Vielfaches von 512. Sei m nun die Anzahl der 512-bit
Blöcke in dem Ergebnis, so gilt b + r + 64 = 521 · m = 32 · 16 · m. Der formatierte
Eingang besteht nun also aus 16 · m 32-bit Blöcken: x0 , x1 , . . . , xm−1 .
Abbildung 3.1: Vorbereitung einer Nachricht als Eingang der Hashfunktion
Nun folgt die Initialisierung der Verkettungsvariablen: (H1 , H2 , H3 , H4 ) ← (h1 , h2 , h3 , h4 )
3. Verarbeitung
Für jedes i von 0 bis m − 1 wird der i-te Block von 16 32-bit Blöcken in den
temporären Speicher kopiert, X[j] ← x16i+j , 0 ≤ j ≤ 15. Diese Blöcke werden in
drei 16-stufigen Runden wie folgt verarbeitet:
Initialisierung der Arbeitsvariablen:
(A, B, C, D) ← (H1 , H2 , H3 , H4 )
Runde 1: Für j von 0 bis 15
t ← (A + f (B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, t ←- s[j], B, C)
Runde 2: Für j von 16 bis 31
t ← (A + g(B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, t ←- s[j], B, C)
Runde 3: Für j von 32 bis 47
t ← (A + h(B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, t ←- s[j], B, C)
Erneuerung der Verkettungsvariablen:
(H1 , H2 , H3 , H4 ) ← (H1 + A, H2 + B, H3 + C, H4 + D)
3. Detailbeschreibung der Hashfunktionen
38
4. Fertigstellung
Der endgültige Hashwert ist die Verkettung: H1 kH2 kH3 kH4
3.2
MD5
Da die Verarbeitung von MD5 deren von MD4 sehr ähnlich ist, wurde die Beschreibung
hier sehr kurz gehalten. MD5 wurde als verbesserte Version von MD4 entwickelt, bevor tatsächlich Kollisionen gefunden wurden. Der Algorithmus ist zwar komplexer als
MD4, arbeitet aber nach einem ähnlichen Prinzip und erzeugt ebenfalls einen 128-bit
Hashwert. Der Algorithmus wurde in der Praxis vielfach eingesetzt. Aus heutiger Sicht
sind jedoch einige Schwachpunkte festzustellen. Während für MD5 selbst bis heute
keine Kollisionen gefunden wurden, so wurden dennoch welche für die MD5 Kompressionsfunktion entdeckt. Das bedeutet, das eines der grundlegenden Entwurfsprinzipien
- nämlich eine Kompressionsfunktion, die Schutz vor Kollisionen bietet - verletzt wurde
[9]. Wenn eine oder zwei Komponenten des Algorithmus fehlen würden, so würde er
laut [1] gebrochen werden. Weil aber diese Komponenten vorhanden sind, überlebt
MD5. Die Änderungen gegenüber MD4 sehen folgendermaßen aus:
• Es wurde eine zusätzliche 16-stufige vierte Runde mit einer neuen Funktion eingeführt.
• Die Funktion der zweiten Runde wurde durch eine weniger symmetrische Funktion ersetzt.
• Die Reihenfolge des Zugriffs auf Teilblöcke wurde für die Runden zwei und drei
geändert, um ähnliche Muster zu vermeiden.
• Die Anzahl der Positionen der Linksverschiebungen in jeder Runde wurden optimiert, um einen schnelleren Lawineneffekt zu erreichen. Die Verschiebungen
unterscheiden sich nun in den verschiedenen Runden.
• Jeder der 4 × 16 Schritte erhält eine eindeutige additive Konstante.
• In jedem der 64 Schritte wird das Ergebnis des vorherigen Schritts addiert.
3. Detailbeschreibung der Hashfunktionen
39
Tabelle 3.2 zeigt die Notation zur Beschreibung des MD5 Algorithmus nach den Änderungen.
Notation
u, v, w
0x674301
+
u ←- s
u
uv
u∨v
u⊕v
f (u, v, w)
g(u, v, w)
h(u, v, w)
h(u, v, w)
(X1 , . . . , Xj ) ←
(Y1 , . . . , Yj )
Bedeutung
Variablen, die einen 32-bit Wert repräsentieren
hexadezimaler 32-bit Integer (least significant Byte: 01)
Addition modulo 232
Ergebnis der Verschiebung von u nach links um s Positionen
bitweises Komplement
bitweises UND
bitweises ODER
bitweises EXKLUSIV ODER
uv ∨ uw
uw ∨ vw
u⊕v⊕w
v ⊕ (u ∨ w)
gleichzeitige Zuweisung (Xi ← Yi ),
wobei (Y1 , . . . , Yj ) vorher ausgewertet wird
Tabelle 3.2: Notation für MD5
Der Algorithmus von MD5 ist dem von MD4 sehr ähnlich wie die folgende Liste veranschaulicht.
Eingang: Bitfolge x mit der Länge b ≥ 0
Ausgang: 128-bit Hashwert von x
1. Definition der Konstanten
Definition von vier 32-bit langen Verkettungswerten die denen von MD4 entsprechen:
h1 = 0x67452301
h2 = 0xefcdab89
h3 = 0x98badcfe
h4 = 0x10325476
Definition der 32-bit Additionskonstanten für alle vier Runden:
y[j] = die ersten 32 Bits des Binärwerts von abs(sin(j + 1)), 0 ≤ j ≤ 63, wobei j
im Bogenmaß gemessen wird und abs“ den Absolutwert berechnet.
”
3. Detailbeschreibung der Hashfunktionen
40
Definition der Reihenfolge der Eingangszeichen für alle vier Runden, wobei die
erste Sequenz von MD4 übernommen wird:
z[0 . . . 15] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
z[16 . . . 31] = [1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12]
z[32 . . . 47] = [5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2]
z[48 . . . 63] = [0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9]
Definition der Anzahl der Bits für die Verschiebung nach links für alle vier Runden:
s[0 . . . 15] = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22]
s[16 . . . 31] = [5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20]
s[32 . . . 47] = [4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23]
s[48 . . . 63] = [6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]
2. Vorbereitung
Die Vorbereitung des Textes zur Verarbeitung folgt exakt dem selben Schema
wie bei MD4.
3. Verarbeitung
Für jedes i von 0 bis m − 1 wird der i-te Block von 16 32-bit Blöcken in den
temporären Speicher kopiert. X[j] ← x16i+j , 0 ≤ j ≤ 15. Diese Blöcke werden in
drei 16-stufigen Runden wie folgt verarbeitet:
Initialisierung der Arbeitsvariablen:
(A, B, C, D) ← (H1 , H2 , H3 , H4 )
Runde 1: Für j von 0 bis 15
t ← (A + f (B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, B + t ←- s[j], B, C)
Runde 2: Für j von 16 bis 31
t ← (A + g(B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, B + t ←- s[j], B, C)
Runde 3: Für j von 32 bis 47
t ← (A + h(B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, B + t ←- s[j], B, C)
Runde 4: Für j von 48 bis 63
t ← (A + k(B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, B + t ←- s[j], B, C)
3. Detailbeschreibung der Hashfunktionen
41
Erneuerung der Verkettungsvariablen:
(H1 , H2 , H3 , H4 ) ← (H1 + A, H2 + B, H3 + C, H4 + D)
4. Fertigstellung
Der endgültige Hashwert ist wie bei MD4 die Verkettung: H1 kH2 kH3 kH4
In Abbildung 3.2 ist eine einzelne Operation von MD5 dargestellt.
Abbildung 3.2: Eine Operation von MD5
3.3
SHA-1
Während MD4 nicht mehr und MD5 nur noch selten eingesetzt werden, sind die beiden
Algorithmen, die heute als sicher gelten und deswegen auch im [4] empfohlen werden,
SHA-1 und RIPEMD-160. SHA-1 wurde von NIST in Zusammenarbeit mit der NSA,
für den Einsatz mit dem Standard für digitale Signatur, entwickelt. Im Federal Register
steht dazu folgendes:
Es wird ein federal processing standard (FIPS 180) für den secure hash
standard (SHS) vorgeschlagen. Dieser Standardisierungsvorschlag spezifiziert einen secure hash algorithm (SHA) für den Einsatz mit dem vorgeschlagenem digital signature standard . . . Bei Anwendungen, die keine digitalen Signaturen erfordern, sollte SHA darüber hinaus immer dann eingesetzt werden, wenn in Anwendungen der Bundesregierung ein sicher HashAlgorithmus benötigt wird. . . . Dieser Standard spezifiziert einen secure
3. Detailbeschreibung der Hashfunktionen
42
hash algorithm (SHA), der nötig ist, um die Sicherheit des digital signature
algorithm (DSA) zu garantieren.. . . SHA wird als sicher bezeichnet, da er so
entworfen wurde, dass es vom Berechnungsaufwand her nicht durchführbar
ist, eine Nachricht zu einem vorgegebenen Hashwert zu bestimmen oder
zwei Nachrichten zu finden, die den gleichen Hashwert ergeben. Jede Änderung bei der Übertragung einer Nachricht wird mit sehr hoher Wahrscheinlichkeit einen anderen Hashwert zur Folge haben, so dass die Unterschrift
(Signatur) nicht verifiziert werden kann [11].
SHA produziert für jede Eingabe < 264 Bit einen Hashwert mit der Länge 160 Bit.
SHA beruht, genau wie MD5, auf ähnlichen Prinzipien, wie jene, die beim Entwurf
von MD4 berücksichtigt wurden und ist sehr stark an diesen Algorithmus angelehnt.
Grundsätzliche Unterschiede liegen darin, das es nicht drei sondern vier Runden gibt
und in jeder Runde statt 16 Operationen 20 Operationen durchgeführt werden. Zu
diesem Zweck wurde eine fünfte Verkettungsvariable eingeführt.
Im Vergleich zu Algorithmen, die einen 128-bit Hashwert generieren, bietet SHA-1
mit seinem 160-bit Hashwert eine wesentlich höhere Sicherheit gegenüber Brute-Force
Attacken. Zur Zeit gelten SHA-1 und RIPEMD-160 als gleich stark, wobei beide sicherer als MD5 eingestuft werden [2]. Die Verarbeitung der Nachricht sieht bei SHA-1
folgendermaßen aus, wobei die selbe Notation wie für MD4 gilt (siehe Tabelle 3.1):
Eingang: Bitfolge x mit der Länge b ≥ 0
Ausgang: 160-bit Hashwert von x
1. Definition der Konstanten
Definition von fünf 32-bit langen Verkettungswerten, wobei die ersten vier denen
von MD4 entsprechen:
h1 = 0x67452301
h2 = 0xefcdab89
h3 = 0x98badcfe
h4 = 0x10325476
h5 = 0xc3d2e1f0
3. Detailbeschreibung der Hashfunktionen
43
Definition der 32-bit Additionskonstanten für alle vier Runden:
1
y1 = 0x5a827999, dieser Wert entspricht dem ganzzahligen Anteil von 232 · 2 2 /4
1
y2 = 0x6ed9eba1, dieser Wert entspricht dem ganzzahligen Anteil von 232 · 3 2 /4
1
y3 = 0x8f1bbcdc, dieser Wert entspricht dem ganzzahligen Anteil von 232 · 5 2 /4
1
y4 = 0xca62c1d6, dieser Wert entspricht dem ganzzahligen Anteil von 232 · 10 2 /4
Die Definition der Reihenfolge bzw. der Verschiebungspositionen entfällt bei SHA-1.
2. Vorbereitung
Die Nachricht wird genauso wie bei MD4 oder MD5 vorbereitet, mit dem kleinen
Unterschied, dass die letzten beiden 32-bit Blöcke die die Länge der Nachricht
b angeben mit dem most significant Block vor dem least significant angehängt
werden. Der formatierte Eingang besteht nun, genau wie bei MD4, aus 16m 32bit Blöcken: x0 , x1 , . . . , xm−1 .
Nun folgt die Initialisierung der Verkettungsvariablen: (H1 , H2 , H3 , H4 , H5 ) ←
(h1 , h2 , h3 , h4 , h5 )
3. Verarbeitung
Für jedes i von 0 bis m − 1 wird der i-te Block von 16 32-bit Blöcken in den
temporären Speicher kopiert. X[j] ← x16i+j , 0 ≤ j ≤ 15. Diese Blöcke werden in
vier 20-stufigen Runden wie folgt verarbeitet:
Expandierung der 16-bit Blocks auf 80 Bit Länge:
Stehe Xj für X[j], so wird der Block wie folgt bearbeitet.
Xj = Xj , für 0 ≤ j ≤ 15
Xj = ((Xj−3 ⊕ Xj−8 ⊕ Xj−14 ⊕ Xj−16 ) ←- 1), für 16 ≤ j ≤ 79
Initialisierung der Arbeitsvariablen:
(A, B, C, D, E) ← (H1 , H2 , H3 , H4 , H5 )
Runde 1: Für j von 0 bis 19
t ← ((A ←- 5)+f (B, C, D)+E +Xj +y1 ), (A, B, C, D, E) ← (t, A, B ←- 30, C, D)
Runde 2: Für j von 20 bis 39
t ← ((A ←- 5+h(B, C, D)+E +Xj +y2 ), (A, B, C, D, E) ← ((t, A, B ←- 30, C, D)
Runde 3: Für j von 40 bis 59
t ← ((A ←- 5+g(B, C, D)+E +Xj +y3 ), (A, B, C, D, E) ← ((t, A, B ←- 30, C, D)
3. Detailbeschreibung der Hashfunktionen
44
Runde 3: Für j von 60 bis 79
t ← ((A ←- 5+h(B, C, D)+E +Xj +y4 ), (A, B, C, D, E) ← ((t, A, B ←- 30, C, D)
In Abbildung 3.3 ist eine Operation von SHA-1 dargestellt.
Abbildung 3.3: Eine Operation von SHA-1
Erneuerung der Verkettungsvariablen:
(H1 , H2 , H3 , H4 , H5 ) ← (H1 + A, H2 + B, H3 + C, H4 + D, H5 + E)
4. Fertigstellung
Der endgültige Hashwert ist die Verkettung: H1 kH2 kH3 kH4 kH5
Bemerkung: Laut [9] enthielt die ursprüngliche SHA-Spezifikation die Linksverschiebung noch nicht, sondern korrigiert ein technisches Problem, durch den der Standard
”
weniger sicher wurde als ursprünglich gedacht“. Seitdem der Linksshift jedoch enthalten
ist, ist SHA-1 laut [5] bis 31. Dezember 2005 für den Einsatz bei sicheren elektronischen Signaturen als sicher anzusehen. Die NSA hat jedoch dieses Problem nicht genau
erläutert.
3. Detailbeschreibung der Hashfunktionen
3.4
45
RIPEMD-160
RIPEMD-160 ist eine weitere Hashfunktion, die auf MD4 basiert, wobei auch Erkenntnisse von MD5 und RIPEMD bei der Konstruktion eingeflossen sind. RIPEMD-160
verarbeitet Teilblöcke der Größe 512 Bit und generiert einen 160-bit Hashwert. Dabei wird jeder Eingabeblock nach der Vorbereitung in zwei getrennten Versionen der
Kompressionsfunktion verarbeitet. Diese parallelen Abläufe werden als left line und
right line bezeichnet. Die beiden 160-bit Ausgänge der separaten lines werden zu einem einzigen 160-bit Hashwert kombiniert. RIPEMD-160 unterscheidet sich von MD4
in der Anzahl der Verkettungsvariablen, der Rundenanzahl und den Rundenfunktionen. Außerdem ist die Reihenfolge des Zugriffs auf die Teilblöcke anders und auch die
Anzahl der Positionen, um die nach links verschoben wird, unterscheidet sich von denen in MD4. Die neuen Rundenfunktionen sind in Tabelle 3.3 aufgelistet, wobei die
selbe Notation wie bei MD4 gilt (Tabelle 3.1). Innerhalb des Algorithmus gibt es zwischen left und right line auch Unterschiede in den beiden zuletzt genannten Punkten.
Weiters besitzen sie unterschiedliche additive Konstanten und die Reihenfolge, in der
die Rundenfunktionen durchgeführt werden, unterscheidet sich. Dieses Design soll die
Sicherheit gegenüber bekannten Attacken steigern. Laut [2, 3] gilt der Algorithmus als
sehr sicher.
Notation
f (u, v, w)
g(u, v, w)
h(u, v, w)
k(u, v, w)
l(u, v, w)
Definition
u⊕v⊕w
uv ∨ uw
(u ∨ v) ⊕ w
uv ∨ vw
u ⊕ (u ∨ w)
Tabelle 3.3: Notation für RIPEMD-160 [2]
Der Algorithmus funktioniert folgendermaßen:
Eingang: Bitfolge x mit der Länge b ≥ 0
Ausgang: 160-bit Hashwert von x
Folgende Liste erläutert die einzelnen Schritte bei der Verarbeitung der Nachricht.
3. Detailbeschreibung der Hashfunktionen
46
1. Definition der Konstanten
Definition von fünf 32-bit langen Verkettungswerten:
h1 = 0x67452301
h2 = 0xefcdab89
h3 = 0x98badcfe
h4 = 0x10325476
h5 = 0xc3d2e1f0
Für die left line werden die 32-bit Additionskonstanten von MD4 übernommen
und neu benannt und zwei weitere definiert:
yL [j] = 0 für 0 ≤ j ≤ 15
yL [j] = 0x5a827999 für 16 ≤ j ≤ 31
yL [j] = 0x6ed9eba1 für 32 ≤ j ≤ 47
yL [j] = 0x8f1bbcdc für 48 ≤ j ≤ 63
yL [j] = 0xa953fd4e für 64 ≤ j ≤ 79
Für die right line werden fünf neue Additionskonstanten definiert:
yR [j] = 0x50a28be6 für 0 ≤ j ≤ 15
yR [j] = 0x5c4dd124 für 16 ≤ j ≤ 31
yR [j] = 0x6d703ef3 für 32 ≤ j ≤ 47
yR [j] = 0x7a6d76e9 für 48 ≤ j ≤ 63
yR [j] = 0 für 64 ≤ j ≤ 79
Die Definition zL [j] der Zugriffsreihenfolge für alle fünf Runden für die
left line :
zL [0 . . . 15] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
zL [16 . . . 31] = [7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]
zL [32 . . . 47] = [3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12]
zL [48 . . . 63] = [1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2]
zL [64 . . . 79] = [4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]
right line :
zR [0 . . . 15] = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12]
zR [16 . . . 31] = [6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2]
3. Detailbeschreibung der Hashfunktionen
47
zR [32 . . . 47] = [15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13]
zR [48 . . . 63] = [8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14]
zR [64 . . . 79] = [12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]
Definition der Anzahl der Positionen für die Verschiebung nach links für alle fünf
Runden für die
left line:
sL [0 . . . 15] = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8]
sL [16 . . . 31] = [7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12]
sL [32 . . . 47] = [11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5]
sL [48 . . . 63] = [11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12]
sL [64 . . . 79] = [9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]
right line:
sR [0 . . . 15] = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6]
sR [16 . . . 31] = [9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11]
sR [32 . . . 47] = [9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5]
sR [48 . . . 63] = [15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8]
sR [64 . . . 79] = [8, 15, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]
2. Vorbereitung
Die Nachricht X wird genauso, wie für MD4 vorbereitet, mit der Ausnahme, dass
eine fünfte Verkettungsvariable hinzugefügt wird: H5 ← h5 .
3. Verarbeitung
Für jedes i von 0 bis m − 1 wird der i-te Block von 16 32-bit Blöcken in den
temporären Speicher kopiert. X[j] ← x16i+j , 0 ≤ j ≤ 15.
Diese Blöcke werden in fünf 16-stufigen Runden wie folgt verarbeitet:
left line:
Initialisierung der Arbeitsvariablen:
(AL , BL , CL , Dl , EL ) ← (H1 , H2 , H3 , H4 , H5 )
Runde 1: Für j von 0 bis 15
t ← (AL + f (BL , CL , DL ) + X[zL [j]] + yL [j]), (AL , BL , CL , DL , EL ) ← (EL , EL +
(t ←- sL [j]), BL , CL ←- 10, DL )
3. Detailbeschreibung der Hashfunktionen
48
Runde 2: Für j von 16 bis 31
t ← (AL + g(BL , CL , DL ) + X[zL [j]] + yL [j]), (AL , BL , CL , DL , EL ) ← (EL , EL +
(t ←- sL [j]), BL , CL ←- 10, DL )
Runde 3: Für j von 32 bis 47
t ← (AL + h(BL , CL , DL ) + X[zL [j]] + yL [j]), (AL , BL , CL , DL , EL ) ← (EL , EL +
(t ←- sL [j]), BL , CL ←- 10, DL )
Runde 4: Für j von 48 bis 63
t ← (AL + k(BL , CL , DL ) + X[zL [j]] + yL [j]), (AL , BL , CL , DL , EL ) ← (EL , EL +
(t ←- sL [j]), BL , CL ←- 10, DL )
Runde 5: Für j von 64 bis 79
t ← (AL + l(BL , CL , DL ) + X[zL [j]] + yL [j]), (AL , BL , CL , DL , EL ) ← (EL , EL +
(t ←- sL [j]), BL , CL ←- 10, DL )
right line:
Die fünf Runden der left line werden auch für die right line durchgeführt wobei
(AR , BR , CR , DR , ER ), yR [j], zR [j], sR [j] die entsprechenden Werte der left line ersetzen. Außerdem wird die Reihenfolge der nicht linearen Funktionen geändert,
so dass die Abfolge l, k, h, g, f lautet. Der erste Schritt besteht in der Initialisierung der Arbeitsvariablen:
(AR , BR , CR , DR , ER ) ← (H1 , H2 , H3 , H4 , H5 )
In Abbildung 3.4 ist der Ablauf einer Operation von RIPEMD-160 dargestellt.
Erneuerung der Verkettungsvariablen:
Nachdem beide lines ausgeführt wurden, werden die Verkettungsvariablen wie
folgend beschrieben erneuert.
t ← H1 , H1 ← H2 + CL + DR , H2 ← H3 + DL + ER , H3 ← H4 + EL + AR ,
H4 ← H5 + AL + BR , H5 ← t + BL + CR
4. Fertigstellung
Der endgültige Hashwert ist die Verkettung: H1 kH2 kH3 kH4 H5
3. Detailbeschreibung der Hashfunktionen
49
Abbildung 3.4: Eine Operation von RIPEMD-160
Um einen Vergleich, der beschriebenen Hashfunktionen zu ermöglichen, sind in Tabelle
3.4 alle wichtigen Hashfunktionen zusammengefasst. Die Bitlänge gibt die Länge des
Hashwerts an. In der Zweiten Spalte sind die Anzahl der Runden und die Anzahl der
Operationen pro Runde angegeben und die letzte Spalte gibt die relative Verarbeitungsgeschwindigkeit bezogen auf MD4 (aus [2] entnommen) an.
Hashfunktion Bitlänge
MD4
128
MD5
128
SHA-1
160
RIPEMD-160
160
Runden × Schritte pro Runde
3 × 16
4 × 16
4 × 20
5 × 16 (parallel)
Geschwindigkeit
1.00
0.68
0.28
0.24
Tabelle 3.4: Zusammenfassung der beschriebenen Hashfunktionen
4
Statistisches Testen
In diesem Kapitel wird die Notwendigkeit des Einsatzes statistischer Testmethoden
zur Überprüfung einer Verteilungsfunktion erläutert. Weiters wird das Prozedere von
Hypothesentest genauer betrachtet. Danach werden einige allgemeine und empirische
Testverfahren und deren Ablauf beschrieben.
4.1
Die Notwendigkeit statistischer Tests
In Kapitel 2.7.5 wurde erläutert, warum eine Gleichverteilung der Bitfolgen bei Hashwerten von eminenter Bedeutung ist. Aber selbst wenn eine Bitsequenz dem Betrachter
auf den ersten Blick zufällig erscheint, so kann sie dennoch versteckte Muster oder Wiederholungen enthalten. Darum stellt sich die Frage, wie überprüft werden kann, ob eine
durch eine Hashfunktion produzierte Bitfolge gut“ ist. Für diesen Zweck bedient man
”
sich nun der Statistik, da sie Methoden bereitstellt um die Zufälligkeit einer Sequenz
quantitativ zu beurteilen. In der Literatur gibt es viele verschiedene Arten von Tests.
Diese Arbeit beschränkt sich jedoch auf eine kleine Auswahl von empirischen Tests,
die in [6] als repräsentativ eingestuft werden und für das Testen von Hashfunktionen
geeignet erscheinen. Es ist jedoch zu beachten, dass wenn sich eine Sequenz in den
Tests T1 , T2 , . . . , Tn als zufällig erweist, ein weiterer Test Tn+1 existieren kann, der die
Hypothese der Zufälligkeit ablehnt. Daher steigert jeder Test, der durchgeführt und
bestanden wird das Vertrauen in die statistischen Qualitäten der Bitfolge. Aus diesem
50
4. Statistisches Testen
51
Grund werden in der Praxis laut [6] in der Regel rund ein halbes Dutzend“ unter”
schiedliche Tests durchgeführt. Wenn eine Sequenz diese Testreihe besteht, so wird
nicht erwartet, dass ein Angriff mit Hilfe statistischer Methoden möglich ist.
Bei der Untersuchung von Hashfunktionen wird zuerst eine Stichprobe aus den Klartexten ausgewählt. Aus diesen Sequenzen werden dann, mit Hilfe der zu testenden
Hashfunktion, Hashwerte generiert. Dabei werden Texte fester Länge auf Hashwerte
abgebildet, wobei h(i) den Hashwert des i-ten Textes darstellt. In Folge wird die empirische Gleichverteilung analysiert. Die Überprüfung der Forderung nach Gleichverteilung (siehe Kapitel 2.3 Punkt 6) entspricht dem Testen des Zufallsgenerators h(i), so
dass auf die in der Literatur bewährten Methoden, zurückgegriffen werden kann.
In der Literatur werden grundsätzlich zwei große Klassen von statistischen Tests unterschieden, theoretische Tests und empirische Tests [12]. Theoretische Tests suchen
bestimmte Charakteristika einer Folge auf Basis der Analyse des, die Folge erzeugenden, Algorithmus’. Der Nachteil theoretischer Tests besteht laut [12] darin, dass
sie normalerweise auf eine bestimmte Klasse von Generatoren beschränkt sind, wodurch Vergleiche mit den Werten anderer Generatoren nicht hinreichend möglich sind.
Bei empirischen Testverfahren wird der Generator hingegen als Black-Box gehandhabt
und nur die von ihm produzierte Zahlensequenz untersucht. Hierbei experimentiert der
Computer mit dem jeweiligen Generator (in unserem Fall der Hashfunktion) und betrachtet bestimmte statistische Eigenschaften der produzierten Bitfolge. Im Zuge dieser
Arbeit werden nur empirische Tests behandelt, theoretische Testverfahren sind sehr gut
in [6, 13, 14] nachzulesen.
4.2
Das Prinzip des statistischen Testens
Bei der Analyse von Stichproben erhält man mittels statistischer Kennwerte keine Sicherheit über einen Sachverhalt, da Kennwerte von Stichprobe zu Stichprobe schwanken. Statistische Tests schränken diese Unsicherheit quantitativ ein. Es sind Entscheidungsverfahren, die über eine a priori formulierte Hypothese nach Sammlung empirischer Informationen (Stichproben) eine konkrete Entscheidung für oder gegen die Hypothese treffen. Sie erlauben die Wahrscheinlichkeit einer Fehlentscheidung abzuschätzen.
4. Statistisches Testen
52
Ziel ist es objektiv und quantitativ zu beurteilen, ob eine Differenz oder ein Kennwert
zufällig entstanden ist oder ein systematischer Effekt vorliegt. Laut [15] wird der Vorgang des Unterscheidens zwischen den möglichen Ergebnissen eines Zufallsexperiments
und dem Entscheiden für eine der zwei Alternativen unter Verwendung der Wahrscheinlichkeitsthteorie als Hypothesentest definiert. Die zwei konkurrierenden Behauptungen
werden als Nullhypothese H0 und Alternativhypothese H1 bezeichnet. Die Entscheidung zwischen den beiden Hypothesen ist mit einer Gerichtsverhandlung vergleichbar,
wobei H0 als Angeklagter zu sehen ist: Im Zweifel für den Angeklagten“.
”
Es stehen also zwei mögliche Entscheidungen zur Auswahl:
• Verwerfe H0 zugunsten von H1
• Verwerfe H0 nicht und betrachte H1 als nicht nachgewiesen
Dabei wird oft nach folgender Entscheidungsregel vorgegangen. Wenn die Ausprägung
x einer Zufallsvariable X vom Erwartungswert µ = E[X] zu weit abweicht, so wird
H0 zugunsten von H1 verworfen. Jeder Skeptiker würde natürlich nicht auf Grund eines einzigen Testdurchlaufs die Nullhypothese verwerfen, sondern mehrere Durchgänge
durchführen.
Der Wertebereich, der ein Verwerfen der Nullhypothese zur Folge hat, wird als kritischer
Wertebereich C definiert.
C = {y : y ∗ ≤ y < ∞}
Der Wert y ∗ ist der Wert, der den gesamten Ausprägungsbereich in einen Akzeptanzbereich und einen Verwerfungsbereich unterteilt und wird deshalb kritischer Wert genannt. Die Wahl des kritischen Werts y ∗ ist ausschlaggebend für die Qualität des Tests.
So muss die Wahrscheinlichkeit bei der Entscheidung einen Fehler zu machen möglichst
gering gehalten werden. Gemäß der Entscheidungsregel entstehen zwei Möglichkeiten,
die richtige Entscheidung zu treffen aber auch zwei Fehlermöglichkeiten, welche in Tabelle 4.1 angeführt sind.
4. Statistisches Testen
Testergebnis
H0 nicht verworfen
H0 verworfen
53
Tatsächlicher Zustand
H0 richtig
H0 falsch
richtige
β-Fehler
Entscheidung Fehler 2. Art
α-Fehler
richtige
Fehler 1. Art Entscheidung
Tabelle 4.1: Fehlermöglichkeiten bei Hypothesentests
Ein α-Fehler tritt auf, wenn die Nullhypothese zugunsten der Alternativhypothese
verworfen wird, obwohl sie richtig ist. Dieser Fehler tritt häufiger auf, wenn y ∗ zu
niedrig gewählt wurde. Wohingegen ein β-Fehler leichter entsteht, wenn y ∗ zu hoch
gewählt wurde. Das bedeutet, dass die Nullhypothese angenommen wird, obwohl sie
falsch ist. α- und β-Fehler verhalten sich also gegenläufig. Sinkt die Wahrscheinlichkeit für das Auftreten eines α-Fehlers, so steigt die Wahrscheinlichkeit des Auftretens
eines β-Fehlers. Die Wahrscheinlichkeit des Auftretens eines Fehlers 1. Art wird Signifikanzniveau bzw. Irrtumswahrscheinlichkeit eines Tests genannt und mit α bezeichnet.
Konventionell wird α = 5% vorgegeben. In seltenen Fällen werden aber auch α = 1%
oder auch α = 10% verwendet, wenn die Umstände ein anderes α rechtfertigen.
Im Gegensatz zu dieser Vorgehensweise, einen Höchstwert α für die Wahrscheinlichkeit
des Fehlers 1. Art festzulegen und daraufhin den kritischen Bereich zu wählen, kann
man aus den Daten x1 , . . . , xn den so genanten p-Wert berechnen und die Signifikanz
des erhaltenen Resultats anhand dieses Wertes beurteilen. Der p-Wert ist die kleinste
Zahl α, für welche die Wahl von α als Testniveau gerade noch zur Ablehnung von
H0 führt. Gilt also z.B. für den p-Wert 0.032, so würde die Hypothese H0 auf dem
5% Niveau verworfen, auf dem 1% Niveau jedoch nicht. Besonders bei der Verwendung
von Statistik-Software-Programmen wird der p-Wert zur Beurteilung eines statistischen
Tests ausgegeben.
In dem bisher beschriebenen Konstrukt eines Tests handelt es sich um eine einseitige
Alternative, da der kritische Wert y ∗ den Akzeptanzbereich nur in eine Richtung abgrenzt. Eine solche Form des Testens ist in Abbildung 4.1 beschrieben. Es existieren
jedoch auch beidseitige Alternativen, wobei dann auch beidseitig ein kritischer Wertebereich existiert. Diese Variante ist in Abbildung 4.2 dargestellt. Die grau schraffierten
4. Statistisches Testen
54
Flächen geben jeweils die Wahrscheinlichkeit für das Auftreten eines Fehlers 1. Art an.
µ0 bezeichnet den Erwartungswert der Datensequenz. In Abbildung 4.3 ist graphisch
dargestellt, wie der Test reagiert, wenn die Nullhypothese bei einer einseitigen Alternative falsch angenommen wurde und die Alternativhypothese H1 zutrifft. Das bedeutet,
dass µ = µ1 der richtige Mittelwert ist.
Abbildung 4.1: Statistischer Test mit einseitiger Alternative
Abbildung 4.2: Statistischer Test mit beidseitiger Alternative
4. Statistisches Testen
55
Abbildung 4.3: Statistischer Test mit einseitiger Alternative und zutreffender
Alternativhypothese H1
4.3
Allgemeine Testverfahren
Es gibt in der Literatur mittlerweile eine Vielzahl von statistischen Tests, wobei im
nächsten Abschnitt diejenigen vorgestellt werden, auf denen viele weitere Tests basieren.
4.3.1
Der χ2 -Test
Einer der bekanntesten statistischen Tests ist laut [6] der χ2 -Test (Chi-Quadrat-Test).
Er stellt eine Basismethode des Testens dar, die in Verbindung mit vielen anderen Tests
eingesetzt wird. Er ist ein verteilungsfreier Signifikanztest zur Prüfung von Hypothesen. Dabei wird eine Prüfmaßzahl verwendet, deren Verteilung näherungsweise einer
χ2 -Verteilung entsprechen soll [16]. Gegenstand des Tests ist der Vergleich zwischen einer empirisch gefundenen und einer theoretisch angenommenen Häufigkeitsverteilung
der Ausprägung eines Merkmals. Im ersten Schritt wird, wie bei der Erstellung eines Histogramms eine Einteilung in Klassen (Kategorien, Intervalle) vorgenommen.
Dann werden die empirischen Häufigkeiten (welche tatsächlich aufgetreten sind) mit
den theoretischen (hypothetischen) verglichen. Weichen sie voneinander zu stark ab,
wird die Nullhypothese verworfen, ansonsten akzeptiert. Angenommen es seien k Klassen gewählt worden, so ist Ys die absolute Häufigkeit der Klasse s, also die Anzahl der
4. Statistisches Testen
56
Datenpunkte in der s-ten Klasse. Die aus der Hypothese über die Verteilung entsprechende, theoretische Wahrscheinlichkeit, dass ein Wert in die s-te Klasse fällt wird mit
ps bezeichnet. Die unter der Hypothese erwartete absolute Häufigkeit des Auftretens
eines Werts in der s-ten Klasse ergibt sich also mit nps , wobei n die Anzahl der Daten angibt. Die Teststatistik V verwendet nun eine quadratische Abweichung zwischen
Vorhersage und Beobachtung.
V =
k
X
(Ys − nps )2
s=1
nps
(4.1)
Die Division durch nps in (4.1) erlaubt eine Gewichtung der Abweichungen, abhängig
von ihrer Wahrscheinlichkeit. Unter Berücksichtigung der Fakten
Y1 + Y2 + . . . + Yn = n
p1 + p2 + . . . + pn = 1
kann (4.1) nun in folgende Form (4.2) gebracht werden, die in der Praxis eine einfachere
und schnellere Berechnung ermöglicht.
k
1X
Ys2
V =
n s=1 ps
!
−n
(4.2)
Die Verteilung von V sieht folgendermaßen aus: Wenn die Nullhypothese über die
Wahrscheinlichkeitsverteilung zutrifft strebt die Verteilung von V mit zunehmender
Stichprobengröße gegen eine χ2 -Verteilung mit k − 1 Freiheitsgraden [17]. Da die Nullhypothese verworfen wird, wenn die Abweichung und damit der Wert für V zu groß
ist, wird für ein gegebenes Signifikanzniveau α der kritische Bereich C durch das 1 − α
Quantil
V > χ2k−1;1−α
der Verteilung definiert. Um einen numerischen Wert für V zu finden, bezieht man sich
auf Tabellen welche die Werte für die χ2 -Verteilung mit v Freiheitsgraden enthalten
(Die Tabelle ist auch im Anhang zu finden.). Es gilt jedoch zu beachten, dass die
Verteilung von V nur asymptotisch“ bekannt ist und nur für große n gut stimmt.
”
Als Faustregel führt [17] folgendes an: Man sollte n groß und die Klasseneinteilung so
wählen, dass in jede Klasse mindestens fünf Datenpunkte fallen.
4. Statistisches Testen
57
Wie in [15] gezeigt, ist die Anwendung eines χ2 - Tests sowohl zur Prüfung der Signifikanz der Abweichung von Beobachtungswerten einer empirischen Verteilung von χ2
verteilten Erwartungswerten einer angenommenen theoretischen Verteilung als auch
als Hypothesentest auf Unabhängigkeit geeignet.
4.3.2
Der Kolmogorov-Smirnov-Test
Ein weiteres Basistestverfahren stellt der Kolmogorov-Smirnov-Test dar. Während beim
χ2 -Test eine fixe (endliche) Anzahl von Klassen festgelegt wird, in die die Datenpunkte
fallen können, ermöglicht der Kolmogorov-Smirnov-Test einen Vergleich empirische Daten mit einer beliebigen Verteilungsfunktion. Zu diesem Zweck wird die Verteilungsfunktion der Zufallsvariablen X folgendermaßen definiert.
F (t) = P (X ≤ t) ∀ t ∈ R
Werden nun n unabhängige Beobachtungen der Zufallsvariable X gemacht und erhält
man dabei die Werte x1 , x2 , . . . , xn , so kann man eine empirische Verteilungsfunktion
formen, die folgendermaßen aussieht.
Fn (t) =
Anzahl aller x1 , x2 , . . . , xn die ≤ t sind
n
Der nächste Schritt ist dann der Vergleich der empirischen Verteilungsfunktion Fn (t)
mit der theoretischen (hypothetischen) Verteilungsfunktion F (t). Eine Einschränkung
des Kolmogorov-Smirnov-Test ist, dass er nur eingesetzt werden kann, wenn die Verteilungsfunktion F (x) keine Sprungstellen besitzt. Der Test basiert nun auf dem Unterschied zwischen F (t) und Fn (t). Eine schlechte“ Sequenz würde sich also von der
”
theoretischen Vorgabe signifikant unterscheiden. Um den Kolmogorov-Smirnov-Test
durchzuführen verwendet man folgende Teststatistik:
Kn+ =
√
n sup (Fn (t) − F (t))
−∞<t<+∞
√
−
Kn = n sup (F (t) − Fn (t))
−∞<t<+∞
(4.3)
4. Statistisches Testen
58
Dabei misst Kn+ die größte Abweichung bei der Fn (t) größer als F (t) und Kn− die größte
√
Abweichung bei der Fn (t) kleiner als F (t) ist. Der Faktor n in (4.3) wird verwendet,
um Kn+ und Kn− zu standardisieren.
Um die Werte von Kn+ und Kn− zu vergleichen, wird genau wie beim χ2 -Test eine
Tabelle zu Hilfe genommen.
Da die Berechnung in (4.3) am Computer jedoch nicht durchführbar ist, da nach einem
Supremum unendlich vieler Werte gefragt wird, wird der Kolmogorov-Smirnov-Test
in der Praxis in leicht veränderter Form durchgeführt. Die genaue Umsetzung ist in
[6] nachzulesen. An dieser Stelle seien nur die in der Praxis verwendeten Formeln zur
Berechnung von Kn+ und Kn− angeführt.
Kn+
Kn−
4.4
√
j
=
− F (xj )
n max
1≤j≤n n
√
j−1
=
n max F (xj ) −
1≤j≤n
n
(4.4)
Empirische Tests auf Gleichverteilung
Es gibt viele Arten empirischer Tests, wovon im nächsten Abschnitt einige vorgestellt
werden. Jeder dieser Tests wird auf eine Sequenz
< Un >= U0 , U1 , U2 , . . . , Un−1
(4.5)
reeller Zufallsvariablen angewendet, die nach H0 unabhängig und gleichverteilt zwischen 0 und 1 sind, wobei n die Stichprobengröße angibt. Einige Tests sind primär für
Sequenzen mit Integerwerten gedacht. In diesem Fall wird die Sequenz
< Yn >= Y0 , Y1 , Y2 , . . . , Yn−1
(4.6)
verwendet, wobei ’Yn = [dUn ] gilt. Die Sequenz ist unabhängig und zwischen 0 und
d − 1 gleichverteilt [6].
4. Statistisches Testen
4.4.1
59
Der Frequenztest
Die erste Anforderung, der die Sequenz (4.5) genügen muss, ist eine tatsächliche Gleichverteilung der Zahlen zwischen 0 und 1. Es gibt laut [6] zwei Möglichkeiten diesen Test
durchzuführen:
1. Es wird ein Kolmogorov-Smirnov-Test mit F (x) = x für 0 ≤ x ≤ 1 durchgeführt.
2. Sei d eine passende Zahl, wie 64 oder 128 für einen binären Computer. Dann wird
die Sequenz (4.6) anstelle der Sequenz (4.5) verwendet. Für jeden Integer r mit
0 ≤ r < d wird dann die Anzahl des Auftretens von Yj = r für 0 ≤ j < n gezählt
und der χ2 -Test mit dem Parameter k = d und der Wahrscheinlichkeit ps =
1
d
für
jede Klasse durchgeführt.
4.4.2
Der Serielle Test
Die Anzahl des Auftretens der Ereignisse wird also zur Untersuchung der Gleichverteilung verwendet. Um die Unabhängigkeit zu untersuchen besteht der nächste Schritt
darin, Paare aufeinander folgender Zahlen zu vergleichen. Um einen seriellen Test
durchzuführen, wird die Anzahl des Auftretens von Paaren (Y2j , Y2j+1 ) = (q, r) für
0 ≤ j < n gezählt. Dann wird der χ2 -Test auf diese angewendet, wobei k = d2 gilt mit
der Wahrscheinlichkeit
1
d2
für jede Klasse. Dabei sollte laut [6] n ≥ 5d2 sein. Dieser Test
kann in Folge natürlich auch auf Tripel (t = 3), Quadrupel (t = 4), u.s.w. angewendet
werden, wobei t die Dimension des Tests genannt wird. Dabei muss jedoch beachtet werden, dass es insgesamt dt Klassen gibt und die Anzahl der Klassen nicht zu hoch gewählt
werden darf, um die obige Gleichung noch erfüllbar zu machen. Die genaue Vorgangsweise bei der Durchführung eine seriellen Tests sieht folgendermaßen aus und ist aus
[18] entnommen. Im ersten Schritt erfolgt eine Aufteilung des Intervalls [0, 1) in d gleich
große Segmente. Dadurch wird eine Aufteilung von [0, 1)t in k = dt kubische Zellen mit
gleichen Volumen festgelegt. Die nächste Stufe des Tests ist die Generierung von n · t
Zufallsvariablen (Y0 , . . . , Ynt−1 ). Aus diesen Werten werden nun Punkte bzw. Vektoren
generiert, welche in bestimmte Zellen fallen Vi = (Yti , . . . , Yti+t−1 ) für i = 0, . . . , n − 1.
Jeder Vektor Vi ist somit aus {0, . . . , d − 1}t und kann also genau einer von k = dt
4. Statistisches Testen
60
Klassen zugeordnet werden, welche in Folge mit j ∈ {0, . . . , dt − 1} indiziert werden.
Sei Xj die Anzahl der Punkte, welche in die Zelle j fallen für j = 0, . . . , k − 1. Der
Vektor (X0 , . . . , Xk−1 ) hat unter der Annahme der Gleichverteilung und Unabhängigkeit der zu untersuchenden Sequenz eine Multinominalverteilung mit den Parametern
(n, k1 , . . . , k1 ). Die übliche Weiterführung des Tests ist die Anwendung der oben erwähnten χ2 -Teststatistik mit k − 1 Freiheitsgraden.
Es gibt grundsätzlich zwei verschiedene Varianten einen seriellen Test durchzuführen.
1. Nicht-Überlappender serieller Test, wobei die zu untersuchende Sequenz Abschnittsweise sukzessive abgearbeitet wird. Das ist die oben beschriebene Variante.
2. Überlappender serieller Test, wobei bei dieser Variante die Vektoren Vi aus der
Sequenz mit Überlappungen generiert werden, d.h. es wird Vi = (Yi , . . . , Yi+t−1 )
gesetzt, wobei dann nur die Zufallsvariablen Y0 bis Yn+t−1 benötigt werden.
Oft wird der Test N mal wiederholt und die N Werte der Teststatistik werden mit
Hilfe des Kolmogorov-Smirnov-Tests [6] auf die χ2 -Verteilung untersucht. Diese Form
wurde auch für die Untersuchung der Algorithmen RIPEMD-160 und SHA-1 gewählt
und ist in Kapitel 5 genau beschrieben.
4. Statistisches Testen
4.4.3
61
Der Pokertest
Beim klassischen Pokertest werden n Gruppen mit fünf aufeinender folgenden Integerwerten {Y5j , Y5j+1 , . . . , Y5j+4 } für 0 ≤ j < n betrachtet. Dabei wird beobachtet, welches
der folgenden sieben Muster bei jedem (unsortierten) Quintupel auftritt:
Alle verschieden
:
abcde
ein Paar
:
aabcd
2 Paare
:
aabbc
3 einer Sorte
:
aaabc
Full House
:
aaabb
4 einer Sorte
:
aaaab
5 einer Sorte
:
aaaaa
Daraufhin wird der χ2 -Test, basierend auf der Anzahl der Quintupel in jeder der sieben Kategorien, angewendet. In der Praxis wird eine leicht modifizierte Statistik mit
asymptotischer χ2 -Verteilung verwendet, welche in [6] beschrieben ist.
5
Der Test
Die Durführung des Tests auf Gleichverteilung und Unabhängigkeit der Hashwerte
erfolgte mit Hilfe der Testsuite c-Lab (eine Weiterentwicklung von p-Lab), welche im
Zuge eines Projekts der Universität Salzburg entwickelt wurde [19]. Diese Testsuite
beinhaltet einen Test, welcher in der Beschreibung als Load Test“ bezeichnet wird.
”
Dieser Test ist eine spezielle Umsetzung des überlappenden seriellen Tests, wobei die
Stichprobengröße und die Dimension des Tests variierbar sind.
5.1
Load Test
Die Durchführung des praktischen Tests auf Gleichverteilung und Unabhängigkeit
der durch die Algorithmen RIPEMD-160 und SHA-1 generierten Hashwerte, erfolgte
grundsätzlich nach dem in Kapitel 4.4.2 beschriebenen Schema. Jedoch waren einige
Vorbereitungsschritte notwendig.
Die erste Stufe bestand darin Bitfolgen zu generieren, die der zu testenden Hashfunktion als Eingang dienten. Dazu wurde ein zyklischer Zähler zl konstruiert mit
l = 0, . . . , 232 − 1, 0, . . ., der 32 Bit lange Sequenzen in ansteigender Form mit den
Werten 0, . . . , 232 − 1 in binärer Darstellung produziert (siehe Tabelle 5.1).
62
5. Der Test
63
Zähler Wert des Zählers in binärer Darstellung
z0
00000000 00000000 00000000 00000000
z1
00000000 00000000 00000000 00000001
..
..
.
.
z232 −1
11111111 11111111 11111111 11111111
Tabelle 5.1: Einganswerte für die Hashfunktion
Im nächsten Schritt wurden diese Zähler unter Verwendung der zu testenden Hashfunktion gehasht“, wodurch sowohl beim Einsatz von RIPEMD-160 als auch bei SHA-1
”
für jeden Zähler zl ein 160-bit (20-byte) Hashwert h(zl ) erzeugt wurde. Um für den
Test eine geeignete Eingangssequenz zur Verfügung stellen zu können, wurde aus den
so generierten Hashwerten jeweils das höchstwetige Bit jedes der 20 Bytes ausgeschnitten. Dann wurden diese neuen Sequenzen aneinandergehängt. Die ersten 20 Bit der
Eingansfolge für den Test stammen also aus dem Hashwert des ersten Zählers h(z0 ),
die nächsten 20 Bit aus h(z1 ) u.s.w. So entstand eine ∞ lange Bitfolge mit der Periodenlänge der 20 · 232 . Diese Bitfolge wurde mit Yi mit i = 0, 1, 2, . . . indiziert. Dieser
Ablauf ist in Abbildung(5.1) dargestellt.
Abbildung 5.1: Vorbereitung des Eingangs für den überlappenden seriellen Test
5. Der Test
64
Der nächste Schritt war die Durchführung des seriellen Tests. Diese erfolgte in den Dimensionen t mit t ∈ {1, 2, 4, 8, 16}, wobei für t > 1 die überlappende Variante des seriellen Tests gewählt wurde. So entstanden die Vektoren bzw. Blöcke Vi = (Yi , . . . , Yi+t−1 ).
Die Stichprobengröße n variierte zwischen 218 und 228 Blöcken Vi der Länge t. Daraus
folgte für die jeweilige Einganssequenz pro Testwiederholung eine Länge von n + t − 1
Bit. Dieser Ablauf ist in Abbildung(5.2) dargestellt.
Abbildung 5.2: Erzeugung der überlappenden Vektoren Vi der Länge t
Insgesamt wurden jeweils N = 16 Testwiederholungen durchgeführt. Dabei zählten
Zähler C(ω0 ,...,ωt−1 ) jeweils die Anzahl des Auftretens einer bestimmten Bitfolge (ω0 , . . . , ωt−1 )
für alle möglichen Bitsequenzen ∈ {0, 1}t .
C((ω0 ,...,ωt−1 ) := # {Vi = (ω0 , . . . , ωt−1 ) : 0 ≤ i ≤ n − 1}
Das Ergebnis des Tests ist eine reelle Zahl T , welche der Wert der χ2 -Statistik zwischen der erwarteten theoretischen und der empirischen Anzahl der Treffer pro Klasse
ist. Das Ergebnis T ist unter der Nullhypothese H0 χ2 -verteilt mit g Freiheitsgraden,
wobei g = 2t −2t−1 gilt. Die letzte Stufe der Testdurchführung war die Anwendung einer
zweiseitigen Kolmogorov-Smirnov-Teststatistik, um herauszufinden, wie groß die Abweichung der empirischen Verteilungsfunktion T von der theoretischen χ2 -Verteilung
ist. Die so entstandenen Ergebnisse werden im nächsten Abschnitt präsentiert und
diskutiert.
5. Der Test
5.2
65
Testergebnisse
Es sei vorweg genommen, dass die Ergebnisse des überlappenden seriellen Tests die
Hypothese H0 der Gleichverteilung und Unabhängigkeit der Hashwerte sowohl bei
RIPEMD-160 als auch bei SHA-1 unterstützen. Im Folgenden werden die graphisch
aufbereiteten Ergebnisse dargestellt und erläutert
Die folgenden Abbildungen zeigen die Ergebnisse des Load Test für RIPEMD-160 und
SHA-1. In der jeweils oberen Abbildung stellen die Balken die Werte der KolmogorovSmirnov-Teststatistik dar, wobei t = {1, 2, 4, 8, 16} die Dimension des Tests angibt. Auf
der y-Achse ist der duale Logarithmus der Stichprobengröße n aufgetragen. Balken mit
höheren Werten sind dunkelgrau gefärbt und zeigen eine Ablehnung der Hypothese auf
Zufälligkeit an. Die Werte, die für die Erstellung dieser Graphiken verwendet wurden
sind im Anhang in tabellarischer Form zu finden (Tabelle B.2 und B.3).
Die beiden unteren Abbildungen stellen die p-Werte der χ2 -Verteilung der 16 Testwiederholungen dar. Auf der x-Achse ist wiederum die Stichprobengröße aufgetragen
und die y-Achse stellt die Dimension des Tests dar. Die Grauwerte entsprechen den
p-Werten, wobei die Extremwerte p = 0 und p = 1 durch schwarz bzw. weiß codiert
sind.
Beide Hashfunktionen haben den Test auf Zufälligkeit bestanden und sind somit zum
Einsatz in der digitalen Signatur zu empfehlen. Im Anhang C sind zu Vergleichszwecken
die Testergebnisse zweier Zufallsgeneratoren zu finden, die den Test nicht bestanden
haben. Für weitere Testergebnisse von diversen Zufallsgeneratoren wird der Leser an
[20, 21] verwiesen.
5. Der Test
5.2.1
66
RIPEMD-160
1
0.5
0
16
8
4
2
1
28
27
26
25
24
23
22
21
20
19
18
Abbildung 5.3: KS-Werte für RIPEMD-160
16
8
4
2
1
18 19 20 21 22 23 24 25 26 27 28
Abbildung 5.4: χ2 -Werte für RIPEMD-160
5. Der Test
5.2.2
67
SHA-1
1.5
1
0.5
0
16
8
4
2
1
28
27
26
25
24
23
22
21
20
19
18
Abbildung 5.5: KS-Werte für SHA-1
16
8
4
2
1
18 19 20 21 22 23 24 25 26 27 28
Abbildung 5.6: χ2 -Werte für SHA-1
6
Zusammenfassung
Im Zuge dieser Arbeit wurden die wichtigsten Aspekte von kryptographischen Hashfunktionen in Zusammenhang mit der digitalen Signatur besprochen. Insbesondere die
statistischen Anforderungen an diese sowie der Ablauf bei der Konstruktion von Hashwerten. Einen besonderen Stellenwert hatten dabei die Hashfunktionen, welche in der
österreichischen Signaturverordnung empfohlen werden, RIPEMD-160 und SHA-1. Mit
Hilfe empirischer statistischer Testverfahren wurde gezeigt, dass diese beiden Hashfunktionen, dem heutigen Stand des Wissens nach, diese Anforderungen erfüllen. Es ist
zu beachten, das eine spezielle Variante des Testens, nämlich der Load Test“ durch”
geführt wurde, bei dem die Stichprobengröße durch die Rechenkapazität beschränkt
wird. Eine Empfehlung ist daher als nächster Schritt die Anwendung anderer Testverfahren, wie beispielsweise der Gambling Test“.
”
So eine Arbeit wird eigentlich nie fertig,
man muss sie für fertig erklären,
wenn man nach Zeit und Umständen
das Mögliche getan hat.
Johann Wolfgang von Goethe
Italienische Reise, 1787
68
Literaturverzeichnis
[1] Burnett, S. und Paine S. Kryptographie. Deutsche Ausgabe (RSA Security’s
Official Guide), midp-Verlag GmbH, 1. Auflage. Bonn, 2001.
[2] Menezes, A. et al. Handbook of Applied Cryptography. CRC Press, Portland, 1996.
[3] Ertel, W. Angewandte Kryptographie. Fachbuchverlag Leipzig im Carl Hanser
Verlag, München, 2001.
[4] Bundesgesetzblatt für die Republik Österreich. Signaturgesetz, 19. August 1999.
[5] Bundesgesetzblatt für die Republik Österreich. Signaturverordnung, Februar 2000.
[6] Knuth, D.E. The Art of Computer Programming. Volume 3. Addison-Wesley,
Reading, Mass., 1998.
[7] Wobst, R. Abenteuer Kryptologie. Addison-Wesley GmbH. 3. Auflage., Bonn,
2002.
[8] Papula, L. Mathematische Formelsammlung für Ingenieure und Naturwissenschaftler. Vieweg, 7. Auflage. Braunschweig, 2001.
[9] Schneier, B. Angewandte Kryptographie. Deutsche Ausgabe, Addison-Wesley
(Deutschland) GmbH, Bonn, 1996.
[10] Rivest, R. L. The MD4 Message Digest Algorithm. In Advances in Cryptologie CRYPTO ’90 Proceedings, pages 303–311, Cambridge, 1990. Springer Verlag.
[11] National Institut of Standards and Technology. Fact Sheet on Digital Signature
Standard. NIST FIPS PUB 186, May 1994.
69
Literaturverzeichnis
70
[12] Wegenkittl, S. Empirical Testing of Pseudorandom Number Generators. Master’s
thesis, Naturwissenschaftliche Fakultät der Universität Salzburg, März 1996.
[13] Hellekalek, P. Good random number generators are (not so) easy to find. Mathematics and Computers in Simulation, 46:485–505, 1998.
[14] L’Ecuyer, P. und Hellelalek, P. Random Number Gernerators: Selection Criteria
and Testing. In Random and Quasi-Random Point Sets, volume 138 of Lecture
Notes in Statistics, pages 223–266. Springer, New York, 1998.
[15] Larsen, R. J. und Marx , M. L. An Introduction to Mathematical Statistics and
its Applications. Prentice-Hall, 2nd edition. New Jersey, 1986.
[16] Koschnick, W.
FOCUS-Lexikon.
Focus Magazin Verlag GmbH., 3. Auflage,
München, 2004.
[17] Dutter, R.
Statistik und Wahrscheinlichkeitsrechnung für InformatikerInnen,
Technische Universität Wien. Skriptum, 2003.
[18] L’Ecuyer, P. et al. Sparse Serial Tests of Uniformity for Random Number Generators. SIAM Jounal on Scientific Computing, 24(2):652–668, 2002.
[19] Auer,T., Entacher,K., Hellekalk, P., Leeb, H., Lendl, O., Wegenkittl, S. The pLAB
www.server. http://random.mat.sbg.ac.at.
[20] Entacher, K. A collection of selected pseudorandom number generators with linear
structures. Technical report, Institut für Mathematik an der Universität Salzburg,
1997.
[21] Wegenkittl, S. The PLAB Picturebook: Load Tests and Ultimate Load Tests, Part
I. Technical report, Institut für Mathematik an der Universität Salzburg, 1997.
[22] Rivest R.L. et al. A Method for Obtaining Digital Signatures and Public-Key
Cryptosystems. Communications of the ACM 21 (2), 120-126, 1978.
Abkürzungsverzeichnis
DSA . . . . . . . . . . . . . . . . . . .
Digital Signature Algorithm
FIPS . . . . . . . . . . . . . . . . . .
Federal Information Processing Standard
MAC . . . . . . . . . . . . . . . . . .
Message Authentication Code
MD . . . . . . . . . . . . . . . . . . . .
Message Digest
MDC . . . . . . . . . . . . . . . . . .
Modification Detection Code
MIC . . . . . . . . . . . . . . . . . . .
Message Integry Check
NIST . . . . . . . . . . . . . . . . . .
National Institute of Standards and Technologies
NSA . . . . . . . . . . . . . . . . . . .
National Security Agency
PEM . . . . . . . . . . . . . . . . . .
Privacy Enhanced Mail
RIPE . . . . . . . . . . . . . . . . . .
Race Integrity Primitives Evaluation
SHA . . . . . . . . . . . . . . . . . . .
Secure Hash Algorithm
71
Appendix
72
A
RSA
RSA ist das mit Abstand populärste Public Key Verfahren und wurde 1978 von seinen
Erfindern Ron Rivest, Adi Shamir und Leonard Adleman vorgestellt [22]. Der Algorithmus besteht aus zwei Teilen, dem eigentlichen Chiffrieren und der Schlüsselerzeugung
[3].
Schlüsselerzeugung:
1. Wähle zufällig zwei große Primzahlen p und q. Die Länge der Zahlen wird derzeit
zwischen 384 und 512 Bit gewählt.
2. Berechne n = p · q (n hat dann eine Länge von 512 bis 1024 Bit).
3. Wähle eine kleine ungerade natürliche Zahl e, die zu ϕ(n) = (p − 1)(q − 1) relativ
prim ist, d.h. es gilt ggT(e, ϕ(n)) = 1.
4. Berechne d als Lösung der Gleichung e·d = 1 mod ϕ(n). d existiert und ist eindeutig bestimmt und kann mit dem erweiterten Euklidischen Algorithmus berechnet
werden (siehe [3]).
5. Das Paar P = (e, n) wird als öffentlicher Schlüssel bekannt gegeben.
6. Das Paar S = (d, n) wird als geheimer (privater) Schlüssel geheim gehalten.
Anwendung von RSA
Verschlüsseln: Die Nachricht M ∈ Zn wird codiert durch
E(M ) = M e mod n
Entschlüsseln: Die Nachricht C ∈ Zn wird decodiert durch
D(M ) = C d mod n
73
A. RSA
74
Der RSA-Algoritmus lässt sich, wie in Kapitel 2.4 beschrieben, auch für digitale Signaturen verwenden. Seine Sicherheit basiert auf der Schwierigkeit große Zahlen in ihre
Primfaktoren zu zerlegen. Die Experten glauben, dass es kein effizientes Verfahren zur
Faktorisierung gibt [3]. Da dies jedoch nicht bewiesen ist, kann über die Sicherheit von
RSA keine definitive Aussage getroffen werden. Da zur Zeit die Faktorisierung der Modulzahl n bei entsprechender Schlüssellänge unmöglich ist, richten sich bisher bekannte
Angriffe gegen die Implementierung des Algorithmus. Weiters ist auf RSA auch ein
Angriff mit gewähltem Geheimtext (choosen-chipertext attack ) möglich. Dabei hat der
Kryptanalytiker mehrere Geheimtexte zur Auswahl und zusätzlich Zugriff auf entsprechende Klartexte, was z.B. in der in Kapitel 2.4 beschriebenen Situation der Fall ist.
Ziel des Angriffs ist es den Schlüssel S zu finden.
B
Tabellen
α
v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
25
31
63
127
255
511
1023
0.100
2.7055
4.6052
6.2514
7.7794
9.2364
10.6446
12.0170
13.3616
14.6837
15.9872
17.2750
18.5493
19.8119
21.0641
22.3071
23.5418
24.7690
25.9894
27.2036
28.4120
29.6151
34.3816
41.4217
77.7454
147.8048
284.3359
552.3739
1081.3794
0.050
3.8415
5.9915
7.8147
9.4877
11.0705
12.5916
14.0671
15.5073
16.9190
18.3070
19.6751
21.0261
22.3620
23.6848
24.9958
26.2962
27.5871
28.8693
30.1435
31.4104
32.6706
37.6525
44.9853
82.5287
154.3015
293.2478
564.6961
1098.5208
0.025
5.0239
7.3778
9.3484
11.1433
12.8325
14.4494
16.0128
17.5345
19.0228
20.4832
21.9200
23.3367
24.7356
26.1189
27.4884
28.8454
30.1910
31.5264
32.8523
34.1696
35.4789
40.6465
48.2319
86.8296
160.0858
301.1250
575.5298
1113.5334
0.010
6.6349
9.2103
11.3449
13.2767
15.0863
16.8119
18.4753
20.0902
21.6660
23.2093
24.7250
26.2170
27.6882
29.1412
30.5779
31.9999
33.4087
34.8053
36.1909
37.5662
38.9322
44.3141
52.1914
92.0100
166.9874
310.4574
588.2978
1131.1587
0.005
7.8794
10.5966
12.8382
14.8603
16.7496
18.5476
20.2777
21.9550
23.5894
25.1882
26.7568
28.2995
29.8195
31.3193
32.8013
34.2672
35.7185
37.1565
38.5823
39.9968
41.4011
46.9279
55.0027
95.6493
171.7961
316.9194
597.0978
1143.2653
0.001
10.8276
13.8155
16.2662
18.4668
20.5150
22.4577
24.3219
26.1245
27.8772
29.5883
31.2641
32.9095
34.5282
36.1233
37.6973
39.2524
40.7902
42.3124
43.8202
45.3147
46.7970
52.6197
61.0983
103.4424
181.9930
330.5197
615.5149
1168.4972
Tabelle B.1: Prozentanteile für die χ2 -Verteilung mit v Freiheitsgraden [2].
75
B. Tabellen
76
Stichprobengröße
222
223
224
t
218
219
220
221
225
226
227
228
1
0.7560
0.6572
0.2686
0.7403
0.2591
0.3645
0.0531
0.7778
0.5956
0.2715
0.8143
2
4
8
16
0.9077
0.8132
0.2387
0.3075
0.7508
0.8405
0.3817
0.4370
0.9616
0.8765
0.1345
0.9187
0.0857
0.2476
0.7101
0.6355
0.3819
0.8714
0.5622
0.0989
0.0861
0.5278
0.5157
0.6786
0.4169
0.9626
0.4051
0.9432
0.7008
0.9843
0.1335
0.6545
0.7812
0.3072
0.5279
0.1567
0.4861
0.5010
0.0230
0.5847
0.2434
0.4337
0.6592
0.6274
226
227
228
Tabelle B.2: K-S-Werte für RIPEMD-160
t
1
2
4
8
16
218
219
220
221
Stichprobengröße
222
223
224
225
0.2036
0.4069
0.5027
0.0084
0.6820
0.2226
0.7455
0.0127
0.9717
0.2269
0.2284
0.5227
0.6291
0.8674
0.0501
0.6036
0.8676
0.7869
0.4106
0.8965
0.3370
0.4344
0.1407
0.9438
0.0534
0.1847
0.2835
0.3706
0.8777
0.5417
0.4709
0.3306
0.5933
0.4474
0.7430
0.4678
0.8573
0.9544
0.9353
0.7003
0.3356
0.4772
0.5449
0.0434
0.0560
0.2073
0.2530
0.4782
0.2965
0.8442
0.9556
0.7573
0.7489
0.8765
0.1639
Tabelle B.3: K-S-Werte für SHA-1
C
Vergleichsgeneratoren
Die Ergebnisse der folgenden beiden Zufallsgeneratoren sollen dem Leser die Möglichkeit bieten, die getesteten Hashfunktionen zu vergleichen. Es wurden absichtlich schlechte
Generatoren gewählt, um zu zeigen, wie der Test auf solche reagiert. Die beiden Generatoren RANDU und ANSIC sind lineare Kongruenz Generatoren (linear congruence
generators, LCGs), d.h. sie produzieren Zufallszahlen (pseudorandom numbers) nach
dem folgenden Prinzip.
LCG(m, a, b, x0 )
xn+1 ≡ a ∗ xn + b
(mod m)
Zahlen im Bereich [0,1) erhält man durch Division durch den Modul“ m.
”
yn = xn /m
Die Parameter {m, a, b, x0} für den Generator RANDU sind {2147483648, 65539, 0, 1}
und für den ANSIC-Generator {2147483648, 1103515245, 12345, 12345}. Eine detaillierte Beschreibung dieser und weiterer Zufallsgeneratoren sind in [12, 14, 21] zu finden.
77
C. Vergleichsgeneratoren
C.1
78
RANDU
2
1.5
1
0.5
0
16
8
4
2
1
28
27
26
25
24
23
22
21
20
19
18
Abbildung C.1: KS-Werte für RANDU
16
8
4
2
1
18 19 20 21 22 23 24 25 26 27 28
Abbildung C.2: χ2 -Werte für RANDU
C. Vergleichsgeneratoren
C.2
79
ANSIC
2
1.5
1
0.5
0
16
8
4
2
1
28
27
26
25
24
23
22
21
20
19
18
Abbildung C.3: KS-Werte für ANSIC
16
8
4
2
1
18 19 20 21 22 23 24 25 26 27 28
Abbildung C.4: χ2 -Werte für ANSIC
Herunterladen