[Diese Seite ist Teil der Homepage www.mein-html.de]

Hashwert-Funktionen MD5 und SHA-1


Hashwerte spielen bei vielen Anwendungen, bei denen Daten sicher identifiziert werden müssen, eine wichtige Rolle. Sowohl für berufliche als auch private Anwender wird eine Überprüfung von Dateien in unterschiedlichen Situationen benötigt:

  • Nach dem Download einer großen Datei aus dem Internet möchte man wissen, ob sie korrekt übertragen wurde.
  • Nach dem Sichern von Daten auf einer CD oder DVD wird ein Weg benötigt, um später feststellen zu können, ob die Daten noch korrekt gelesen werden (oder nach langer Lagerung der Datenträger einzelne Bytes falsch sind).
  • Beim Verdacht auf einen Virus soll zunächst festgestellt werden, ob bestimmte Systemdateien noch ihren ursprünglichen Inhalt haben.
  • Es soll ermittelbar sein, ob E-Mails bei ihrem Transport verändert wurden (z.B. durch Viren oder bewußte Sabotage) und deshalb nicht mehr vertrauenswürdig sind.
  • Ein vertragsrelevantes elektronisches Dokument soll eindeutig bezeichnet werden, so daß es im Nachhinein nicht gegen einen anderen Inhalt ausgetauscht werden kann.

Die Lösung die Beantwortung derartiger Aufgabenstellungen sind Hashwerte. Das sind Zahlen, die aus dem Inhalt von Dateien abgeleitet werden und bestimmte Kriterien erfüllen. Leider gibt es keine brauchbare deutsche Übersetzung für den Begriff "Hash" in der deutschen Sprache. Vielfach wird der Hashwert deutsch als Prüfsumme bezeichnet, was aber inhaltlich falsch ist. Eine Prüfsumme verändert sich beispielsweise nicht, wenn Zeichen einer Datei miteinander vertauscht werden. Um die Korrektheit einer Datei beurteilen zu können, müssen Vertauschungen von Zeichen aber erkannt werden. Außerdem sollen Hashwerte auch als gerichtsfester Beweis für den Inhalt einer Datei dienen können. Bei einfachen Prüfsummen wäre diese Absicht sicherlich sinnlos, denn zu einer existierenden Prüfsumme läßt sich im Allgemeinen problemlos eine Datei beliebigen Inhaltes erstellen.

An einen Hashwert werden viel höhere Anforderungen gestellt als an eine einfache Prüfsumme: Bei jedweden Änderungen des Dateiinhaltes soll der Hashwert sich ebenfalls ändern. Die Wahrscheinlich, daß zwei verschiedene Dateien zufällig denselben Hashwert haben, soll vernachlässigbar gering sein. Es soll praktisch unmöglich sein, eine vorgegebene Datei abzuändern (z.B. in einem elektronischen Vertrag nachträglich Textpassagen zu ändern) und damit eine neue Datei mit demselben Hashwert zu erzeugen. Denn im Gegensatz zu einer Prüfsumme soll ein Hashwert nicht nur zufällige Veränderungen einer Datei (z.B. Übertragungsfehler) aufdecken, sondern auch vorsätzliche Änderungen, die in betrügerischer Absicht erfolgen.

Aus dieser Sichtweise heraus wird der Hashwert einer Datei auch häufig als ihr Fingerabruck bezeichnet. Der Fingerabdruck jedes Menschen gilt als einzigartig. Es ist praktisch unmöglich, zu einem vorgegebenen Fingerabdruck einen zweiten Menschen zu finden, der denselben Fingerabdruck hat. Bezogen auf Dateien hat sich allerdings auch die Bezeichnung "Fingerabdruck" für "Hashwert" nicht etabliert, allenfalls wird das englische Wort "fingerprint" benutzt.

Manchmal spricht man auch davon, daß eine Datei mit einem Hashwert "signiert" wird. Zu einer Signatur gehört in der Regel allerdings zusätzlich zur Hashfunktion noch eine vertrauenswürdige Stelle, die die ermittelten Werte speichert und die Identität der signierenden Personen bestätigt (sogenannte Zertifikate).

Ergänzend sei noch gesagt, daß Hashwerte nicht zwingend von Dateien gebildet werden müssen. Hashwerte lassen sich zu jeder Folge von Bytes berechnen, auch beispielsweise zu einer einzelnen E-Mail-Adresse. Damit man aus Daten einen Hashwert bilden kann, müssen diese Daten nicht zwingend als Datei auf einem Datenträger gespeichert sein. Bei vielen Anwendungen von Hashwerten ist es aber aber doch nützlich oder sogar wichtig, die Ausgangsdaten dauerhaft abzuspeichern. Deshalb bezeichnet dieser Artikel die Datengrundlage einer Hashwert-Berechnung stets als Datei.

Der Hashwert MD5

Die Hash-Funktion MD5 ("Message Digest Algorithm 5") wurde 1991 von dem Mathematiker Ronald Linn Rivest am Massachusetts Institute of Technology (MIT) in den USA entworfen. Im April 1992 wurde die Berechnung eines Hashwertes gemäß MD5 in dem Dokument RFC 1321 spezifiziert und damit zu einem allgemeingültigen Internet-Standard erklärt.

Es handelt sich bei MD5 um ein Berechnungsverfahren (eine mathematische Funktion), mit dem aus einer Datei ein Hashwert mit 128 Binärstellen, also eine Zahl im Bereich von 0 bis 340282366920938463463374607431768211455 ermittelt wird. Es wird also eine Zahl aus einem Wertebereich von über 340 Milliarden Milliarden Milliarden Milliarden errechnet - und entsprechend klein ist die Chance, zu einem vorgegebenen Hashwert sich eine passende Datei auszudenken. Dagegen ist ein Sechser im Lotto mit einer Wahrscheinlichkeit von Eins zu 14 Millionen fast schon als sicheres Ereignis einzustufen.

Während die Lottozahlen aus einer Lostrommel gezogen und deshalb nicht vorhersagbar sind, ist die Hash-Funktion bekannt. Rein Thoretisch lassen sich deshalb zu einem vorgegebenen Hashwert beliebig viele dazu passende Dateien erzeugen. Es war deshalb Aufgabe von Kryptograhie-Experten, zu überprüfen, ob dies nicht nur theoretisch, sondern auch praktisch möglich ist:

Ein Betrüger will einen mit einem Hashwert signierten Vertrag durch einen anderen (für ihn vorteilhafteren) Vertrag austauschen. Da seine Vertragsvariante einen anderen Hashwert liefert, muß er seinen Text so lange mit Füllstoff ergänzen oder verändern, bis sich wieder der ursprüngliche Hashwert ergibt. Der naheliege Ansatz ist sicherlich das Probieren: Er verändert so lange seinen Text und berechnet immer wieder den Hashwert, bis der gewünschte Wert gefunden ist. Aufgrund der großen Menge von Hashwerten, die herauskommen können, rennt ihm dabei aber die Zeit davon: Selbst, wenn er einen Superkomputer hätte, der in jeder Sekunde zu einer Milliarde Dateien den Hashwert berechnen kann (was völlig utopisch ist), würde er noch Tausend Milliarden Millarden Jahre brauchen, bis er eine Datei mit identischem MD5-Hashwert gefunden hat.

Wenn das sture Durchprobieren der einzig mögliche Weg ist, zu einem Hashwert eine passende Datei zu generieren, dann gilt die Hashfunktion als sicher. Im Grunde muß die Hashfunktion sich ähnlich verhalten wie das Schachspiel: Ein einfaches Regelwerk, das leicht zu durchschauen ist, keinerlei Zufallseinflüsse (im Gegensatz zu einem Würfelspiel), und trotzdem gibt es praktisch keine Möglichkeit, mit einer einfachen Formel zu einer vorgegebenen Stellung der Schachfiguren den optimalen Zug zu berechnen.

In den Jahren 1994 bis 1996 fand Hans Dobbertin, Professor am Lehrstuhl für Kryptologie und Informationssicherheit der Ruhr-Universität Bochum, Indizien dafür, daß es bei der Hashfunktion MD5 eventuell doch eine Möglichkeit geben könnte, schneller als durch stures Durchprobieren an eine Datei zu einem vorgegebenen Hashwert zu kommen. Seine Überlegungen wurden im Jahr 2004 von einem Team chinesischer Wissenschaftler bestätigt, denen es auf einem Großrechnersystem gelang, zwei unterschiedliche Dateien mit demselben Hashwert zu finden. Bis heute hat jedoch keiner der Wissenschafler eine Möglichkeit gefunden, in praktikabler Zeit zu einem beliebigen vorgegebenen Hashwert eine passende Datei zu erfinden. Das Hash-Verfahren MD5 wird deshalb noch in vielen Bereichen eingesetzt, hat insgesamt aber einen Vertrauensverlust erlitten.

Der Hashwert SHA-1

Der Abkürzung SHA bedeutet "Secure Hash Algorithm" und steht für mehrere Verfahren zur Berechnung von Hashwerten, die ab 1994 vom National Institute of Standards and Technology (NIST) in den USA entwickelt wurden. Das Berechnungsverfahren SHA-1 wurde 1995 veröffentlicht und gilt als Nachfolger von MD5.

Nachdem Zweifel an der Sicherheit von MD5 aufkamen, entwickelten verschiedene Mathematiker rund um den Globus neue Hashfunktionen. Unter anderen wurde von deutschen Wissenschaftlern die Hashfunktion RIPEMD-160 erdacht und 1996 veröffentlicht. Zur gleichen Zeit entwickelten belgische Kryptografieexperten ein Verfahren mit den Namen Whirlpool und israelische Forscher ein Verfahren mit dem Namen Tiger. Einige Jahre konkurrierten diese Verfahren miteinander, bis im September 2001 durch Spezifikation in RFC 3174 die Hashwert-Berechnung gemäß SHA-1 zum Internet-Standard erklärt wurde.

SHA-1 erzeugt Hashwerte mit 160 Binärziffern, liefert also Zahlen mit Wertebereich von 0 bis 1461501637330902918203684832716283019655932542975. Gegenüber MD5 gibt also rund 4 Millarden mehr mögliche Hashwerte. SHA-1 liefert zu jeder Datei einen Hashwert aus über Tausend Milliarden Millarden Millarden Millarden Millarden Möglichkeiten (zählen Sie mal nach, jede Milliarde ist eine Multiplikation mit 1000000000, entspricht also neun Ziffern).

Bis heute sind keinerlei Indizien bekannt, die für eine Unsicherheit von SHA-1 sprechen würden, also dafür, daß man zu einem vorgegebenen Hashwert eine passende Datei erdenken könnte, ohne dafür alle Möglichkeiten durchprobieren zu müssen. Zwar meldeten im Jahr 2005 mehrere chinesische Wissenschaftler die Sensation, SHA-1 geknackt zu haben, jedoch stellte sich bei genauerer Betrachtung heraus, daß es sich nicht um SHA-1 handelte, sondern eine andere Hashfunktion, die zwar SHA-1 sehr ähnlich war, aber Schwächen aufwies.

Hashwerte nach dem Standard SHA-1 gelten deshalb als uneingeschränkt vertrauenswürdig. Eine Datei, zu der der Hashwert gemäß SHA-1 veröffentlicht wurde, läßt sich im Nachhinein nicht mehr unbemerkt verändern.

Anwendungen beim Download von Dateien

Ohne konkreten Zusammenhang sind Hashwerte nutzlos. Ähnlich wie der Fingerabdruck eines Menschen, der erst dadurch Bedeutung bekommt, daß er an einem bestimmten Ort (z.B. am Tatort eines Verbrechens) gefunden wird, so werden auch Hashwerte erst dadurch interessant, daß sie in einem bestimmten Zusammenhang veröffentlicht (oder anderweitig genutzt) werden.

Im World Wide Web begegnen einem Hashwerte häufig im Zusammenhang mit Datei-Downloads. Bei größeren Dateien, die von verschiedenen Servern heruntergeladen können, soll sichergestellt werden, daß sich nicht einer der Serverbetreiber als böser Bube entpuppt und wissentlich oder unwissentlich Schadcode in die Software einschleust. Aus diesem Grund veröffentlich der Urheber (also z.B. der Programmierer einer Software) auf seiner Homepage den Fingerabdruck der Original-Datei in Form eines Hashwerts. Damit kann jeder, der sich die Datei irgendwo besorgt (egal, ob er sie aus dem Internet lädt, oder er sie sich von einem Freund kopiert), sicher überprüfen, ob er wirklich die Originaldatei ohne Veränderungen erhalten hat.

Auch ich habe auf meiner Seite http://www.daniel-rehbein.de/bahnbilder2004.html zu den dort bereitgestellten CD-Images Hashwerte nach MD5 und SHA-1 veröffentlicht. Andere Beispiele für Hashwerte im Zusammenhang mit umfangreichen Datei-Downloads sind die UltimateBootCD (eine CD-ROM mit PC-Diagnosewerkzeuge oder die mehreren Gigabyte großen DVD-Images der Wikipedia-Distribution. Bei Servern, die größere Mengen unterschiedlicher Dateien anbieten (z.B. ftp-Servern), sind die Hashwerte häufig als zusätzliche Textdateien mit den Dateiendungen ".md5" oder ".sha1" abgelegt. Dies sieht man z.B. bei der Knoppix-Distribution unter http://ftp.uni-erlangen.de/pub/mirrors/knoppix/ oder dem Apache-Webserver unter http://www.apache.de/dist/httpd/

Eine gute Beschreibung dieser Anwendung von Hashwerten mit Tipps für Anbieter und Nutzer habe ich auf auf der Webseite http://www.virenschutz.info/virenschutz-tutorials-167.html gefunden.

Anwendungen zur digitalen Unterschrift

Im Bereich der elektronischen Unterschriften, die bei zunehmender Verbreitung elektronischer Vertragsabschlüsse immer wichtiger werden, sind Hashwerte eine wichtige Komponente, reichen aber alleine nicht aus. Denn der Hashwert ist nur ein eindeutiges Merkmal einer Datei, sagt aber nichts über die Eigenschaften dieser Datei aus, und somit auch nichts über die Identität des Verfassers.

Bei der digitalen Unterschrift wird als erster Schrift zur Signierung eines Dokument der Hashwert gebildet. Dieser Hashwert wird dann mit einem asymmetrischen Kyrpographieverfahren von Verfasser verschlüsselt. Eine anerkannte Zertifizierungsstelle bestätigt, daß der kryptographische Schlüssel einer bestimmten Person gehört. Eine ausführliche Darstellung findet man im Web unter http://de.wikipedia.org/wiki/Elektronische_Unterschrift

Anwendungen zur gerichtsverwertbaren Beweissicherung

Freie Journalisten, Schriftsteller, aber auch gewöhnliche Webmaster, stehen zuweilen vor dem Problem, einen Beweis zu erbringen, daß ein bestimmter Text von ihnen verfaßt wurde. Reicht ein freier Journalist ein Manuskript bei einer Zeitung ein und diese veröffentlicht seinen Text ohne Vergütung und ohne Namensnennung, so ist nicht eindeutig, von wem der Text stammt. Es kann passieren, daß dann vor Gericht (bei einem Prozeß um das ausstehende Honorar) Aussage gegen Aussage steht.

Bei Urhebern mit regelmäßigen Veröffentlichungen haben sich in der Regel vertrauensvolle Vertragsbeziehungen entwickelt. Bei Personen jedoch, die nur gelegentlich schreiben (zeichen, photographieren oder ähnliches) und ihre Werke dann auf dem freien Markt anbieten, ist der gerichtssichere Nachweis ihrer Urheberschaft von existenzieller Bedeutung. Bisher wird dabei in der Regel so vorgegangen, daß die Manuskripte oder Datenträger in einem mit Datum versehenen und versiegelten Umschlag einer unabhängigen und vertrauenswürdigen Person (nicht zwingend einem Notar) übergeben werden. Diese Person kann dann im Zweifelsfall vor Gericht bezeugen, daß sie die Unterlagen zu dem betreffenden Datum (also vor der Veröffentlichung) vom Urheber erhalten hat.

Mit Einzug der elektronischen Medien ist eine neue Vorgehensweise in die Diskussion gekommen: Wenn ich nachweisen will, daß ein bestimmter Text zu einem bestimmten Datum von mir verfaßt wurde, speichere ich die betreffende Datei dauerhaft und veröffentliche meinem Namen, den Dateinamen und den SHA1-Hashwert als Kleinanzeige in einer Tageszeitung. Erst nach Erscheinen dieser Kleinanzeige veröffentliche ich meinen Text. Wird nun der Text geklaut, so kann ich anhand der im Zeitungsarchiv auffindbaren Kleinanzeige mit dem Hashwert (der zu der gespeicherten Ursprungsversion des Textes passt) nachweisen, daß ich zum Datum des Anzeigenschlusses den Text vorliegen hatte. Derjenige, der den Text kopiert und unberechtigt als sein eigenes Werk ausgegeben hat, kann keinen früheren Zeitpunkt nachweisen, zu dem er im Besitz des Textes gewesen wäre, also bin ich beweiskräftig als Urheber identifiziert.

In der Diskussion mit Urhebern, die zuweilen vor Gericht um ihre Urheberschaft streiten müssen, zeigt sich jedoch, daß den Richterinnen und Richtern wenig Sachverstand in Bezug auf mathematische und kryptographische Sachverhalte zugetraut wird. Ein Zeuge aus Fleisch und Blut, der vor Gericht vereidigt wird, macht offenbar mehr Eindruck auf Richterinnen und Richter als ein als sicher anerkanntes und weltweit eingesetztes Verfahren zur Berechnung von eindeutigen Hashwerten wie MD5 oder SHA-1.

Berechnung von Hashwerten auf dem PC

Spätestens, wenn man größere Dateien aus dem Internet lädt, sollte man sich um die Datenintegrität Gedanken machen und die Dateien auf Korrektheit prüfen. Doch ausgerechnet die am meisten genutzte Betriebssystemfamilie, Microsoft Windows, bringt ab Werk kein Werkzeug zur Berechnung von Hashwerten mit.

Während unter OS-X (Macintosh) und Linux-Systemen Standardwerkzeuge zur Hashwertberechnung existieren und die Komponenten des Betriebssystems mit Hashwerten veröffentlicht werden, versieht der Softwarehersteller Microsoft seine Service-Packs und andere frei verfügbaren Softwarebausteine nicht mit öffentlich einsehbaren Hashwerten nach standardisierten Verfahren wie MD5 oder SHA-1 und sieht dementsprechend auch keine Notwendigkeit, ein Tool zur Berechnung von Hashwerten mitzuliefern.

Für Windows-Benutzer habe ich deshalb ein kleines Helferlein programmiert, mit dem man im Datei-Explorer zu jeder Datei die Hashwerte MD5 und SHA-1 ermitteln kann. Blättern Sie um zum Download des Programms:



[Abrufstatistik]  Nach oben  Homepage  Impressum & Copyright

  Adresse zum Setzen eines Links: http://www.daniel-rehbein.de/hashwerte.html