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