Montag, 1. März 2010


Topthema

Donnerstag, 10. Mai 2007 | Topthema

About Security #104: Hashfunktionen — Sicherheit

(Link zum Artikel: http://www.entwickler.de/php/kolumnen/035677)

Wie sicher sind die in About Security #102 und #103 vorgestellten Hashfunktionen? Zuerst stellt sich dabei die Frage: Was will ein Angreifer erreichen? Es gibt zwei Haupteinsatzgebiete für Hashfunktionen: Digitale Signaturen und Integritätsprüfungen. Im Rahmen einer digitalen Signatur wird die Hashfunktion verwendet, um den zu signierenden Text zu komprimieren: Statt des kompletten Textes wird nur dessen Hashwert signiert ('Hash-then-Sign'-Paradigma). Bei der Integritätsprüfung wird der Hashwert beliebiger Daten berechnet, gespeichert und später mit dem erneut berechneten Hashwert verglichen. Stimmen gespeicherter und berechneter Hashwert überein, wurden die Daten nicht verändert. So kann z.B. die Unversehrtheit von Dateien oder Netzwerkpaketen sichergestellt werden.

Kryptographisch gilt eine Hashfunktion als gebrochen (und damit unbrauchbar), wenn man allgemein Kollisionen berechnen kann. Für einen praktischen Angriff reicht das nicht aus: Ein Angreifer muss eine für ihn brauchbare Kollision berechnen können. Schließlich nutzt es ihm wenig, einen signierten Vertragstext durch eine signierte Buchstabenwüste oder ein ausführbares Programm durch eine nicht ausführbare Datei zu ersetzen.

N E U ! Security aktuell
Täglich aktuelle Security-Infos!

Grundsätzlich ist immer ein Brute-Force-Angriff möglich: Ein 128-Bit-Hashwert kann 'nur' 2^128 verschiedene Werte annehmen, ein 160-Bit-Hashwert 2^160 – es muss also zwangsläufig viele Kollisionen geben. Um zu gegebenen Eingabedaten und zugehörigem Hashwert mit ausreichender Wahrscheinlichkeit eine Kollision zu finden, müsste man also 'nur' die Hashwerte für 2^128 bzw. 2^160 Eingaben berechnen. Mit heutiger Hardware ein illusorischer Versuch. 'Schneller' geht es, wenn nur irgendeine Kollision gesucht wird, der Hashwert also beliebig sein kann. Für Hashfunktionen mit einem 128-Bit-Hashwert werden dann 2^64 Berechnungen benötigt, bei einem 160-Bit-Hashwert 2^80 – ohne dass die Hashfunktion irgendeine Schwachstelle enthalten muss. Mit steigender Rechenleistung wird eine Hashfunktion also generell unsicher(er). Aktuell ist ein Brute-Force-Angriff auf 160-Bit-Hashwerte aber praktisch unmöglich, und das wird sich in den nächsten Jahren auch kaum ändern.

Schlechter sieht die Sache aus, wenn die Hashfunktion eine Schwachstelle enthält. So können inzwischen Kollisionen in MD4 per Hand berechnet werden, in SHA-1 wurde der Aufwand auf 2^63 Berechnungen reduziert (About Security #103). Zwar ist auch das noch eine sehr große Zahl, es besteht aber durchaus die Möglichkeit, dass sich die Angriffe weiter verbessern lassen.

Und was bedeutet das in der Praxis?

Beim Angriff auf eine digitale Signatur sind zwei Fälle zu unterscheiden:

  • Kann der Angreifer den Inhalt des zu signierenden Textes bestimmen, kann er im Rahmen eines Geburtstagsangriffs vorab zwei passende Texte suchen.
  • Sind Text und Signatur vorgegeben, bleibt dem Angreifer ein Preimage-Angriff: Er muss zum gegebenen Text einen zweiten Text mit identischem Hashwert finden, der einen für ihn nützlichen Inhalt hat.

Der Aufwand für einen Geburtstagsangriff ist durch die in About Security #103 erwähnten Angriffe, vor allem dem im August 2006 veröffentlichten Angriff (PDF), bei dem ein Teil der gefälschten Nachricht frei gewählt werden kann, deutlich gesunken. Man sollte also sicherheitshalber keine von Dritten vorgelegten Texte signieren – oder diese vor dem Signieren abändern. Für bereits signierte Texte besteht noch keine Gefahr, da die bisher vorgestellten Angriffe nur das Finden zufälliger Kollisionen erleichtern. Für einen Preimage-Angriff sind immer noch 2^(Länge des Hashwerts)Berechnungen notwendig.

About Security: Die komplette Serie

Dies gilt entsprechend auch für integritätsgeschützte Daten: Ein Angreifer könnte evtl. zwei Programme mit gleichem Hashwert konstruieren, von denen eines harmlos ist und das andere Schadfunktionen enthält. Zu einem vorhandenen Programm ein Schadprogramm mit identischem Hashwert zu finden, um z.B. einen eingeschleusten Virus zu tarnen, ist dagegen praktisch unmöglich.

Gegenmaßnahmen

Die einfachste Gegenmaßnahme besteht in der Verschlüsselung der signierten bzw. integritätsgeschützten Daten: Wenn der Angreifer die Originaldaten nicht kennt, kann er auch keinen Preimage-Angriff durchführen.

Eine weitere Möglichkeit ist der Wechsel zu einer Hashfunktion mit einem längerem Hashwert, z.B. SHA-256 und längere Varianten. Allerdings steht nicht fest, ob diese nicht ähnliche Schwachstellen wie SHA-0 und SHA-1 enthalten, von denen sie abstammen. Dasselbe gilt für die europäischen RIPEMD-Algorithmen, z.B. RIPEMD-160: RIPEMD, die ursprüngliche Fassung, stammt ebenfalls von MD4 ab und wurde 2004 gebrochen.

Eine Abhandlung über die zurzeit für digitale Signaturen nach dem Signaturgesetz (SigG) als geeignet eingestuften Algorithmen veröffentlicht die Bundesnetzagentur.

Das US-amerikanische 'National Institute of Standards and Technologies' (NIST) hat inzwischen ähnlich wie bei der Entwicklung des DES-Nachfolgers AES (siehe About Security #74) einen Wettbewerb zum Finden eines Nachfolgers für SHA-1 gestartet. Die Veröffentlichung des neuen Standards ist für 2012 geplant.

Damit ist der kurze Exkurs in die Kryptographie abgeschlossen. Ab der nächsten Folge geht es um das Thema 'Mobile Security'.

Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!

Carsten Eilers

About Security – Übersicht zum aktuellen Thema "Kryptographie – Hashfunktionen"

Kommentare

Folgende Links könnten Sie auch interessieren