Frage

Es ist trivial, eine sichere Hash-Funktion wie SHA-256 zu verwenden und weiterhin MD5 zu verwenden, für die Sicherheit ist rücksichtsloses Verhalten. Allerdings gibt es einige Komplexitäten Hash-Funktion Schwachstellen, die ich mag besser verstehen.

Collisions haben erzeugt für MD4 und MD5 . Laut NIST, ist MD5 nicht eine sichere Hash-Funktion. Es dauert nur 2 39 Operationen eine Kollision zu erzeugen und sollte nie verwendet werden, um Passwörter . Jedoch SHA-1 ist anfällig für einen ähnlichen Kollisions Angriff in dem eine Kollision gefunden werden kann in 2 69 Operationen, während Brute-Force-2 80 . Niemand hat eine SHA-1 Kollision erzeugt und NIST noch listet SHA-1 als sichere Nachrichtenfunktion verdauen.

Wenn also ist es sicher eine gebrochene Hash-Funktion zu benutzen? Auch wenn eine Funktion gebrochen ist, kann es immer noch „groß genug“ sein. Nach Schneier einer Hashfunktion anfällig für eine Kollisions angreifen noch verwendet werden, wie ein HMAC . Ich glaube, das liegt daran, dass die Sicherheit eines HMAC auf seinem geheimen Schlüssel abhängig ist und eine Kollision kann nicht gefunden werden, bis dieser Schlüssel erhalten wird. Sobald Sie den Schlüssel in einem HMAC verwendet haben es bereits kaputt ist, so ist es ein strittiger Punkt. Was Anfälligkeiten Hash-Funktion würde die Sicherheit eines HMAC untergraben?

nehmen Lassen Sie sich diese Eigenschaft ein bisschen weiter. Ist es dann sicher zu einer sehr schwachen Nachricht für Passwörter verdauen wie MD4 zu verwenden, wenn ein Salz, um das Passwort vorangestellt wird? Halten Sie die MD4 und MD5 Angriffe Angriffe im Auge sind prefixing, und wenn ein Salz vorangestellt wird, dann kann ein Angreifer die Kontrolle nicht das Präfix der Nachricht. Wenn das Salz wirklich ein Geheimnis ist, und ist nicht mit dem Angreifer bekannt ist, dann ist egal, ob es um das Passwort angehängt wird? Ist es sicher, anzunehmen, dass ein Angreifer nicht eine Kollision, bis die gesamte Nachricht erhalten wurde, erzeugen kann?

Kennen Sie anderen Fällen, in denen eine gebrochene Hash-Funktion kann ohne die Einführung einer Sicherheitslücke in einem Sicherheitskontext verwendet werden?

(Bitte posten Nachweise, weil es genial ist!)

War es hilfreich?

Lösung

sind eigentlich Kollisionen leichter als das, was Sie Liste auf beiden MD5 und SHA-1. MD5-Kollisionen können in der Zeit äquivalent zu 2 26.5 Betrieb (wo ein "Betrieb" ist die Berechnung von MD5 über eine kurze Nachricht) zu finden. Siehe diese Seite für einige weitere Details und eine Implementierung den Angriffs (ich schrieb, dass Code, es eine Kollision durchschnittlich innerhalb von 14 Sekunden auf einem 2,4 GHz Core2 x86 findet in 64-Bit-Modus)

.

Auch der bekannteste Angriff auf SHA-1 ist in etwa 2 61 Operationen, nicht 2 69 . Es ist noch theoretisches (keine tatsächliche Kollision wurde noch produziert), aber es ist in dem Bereich des Machbaren.

Wie für Auswirkungen auf die Sicherheit: Hash-Funktionen sind in der Regel gesagt drei Eigenschaften haben:

  • No Urbild: Da y , sollte es nicht möglich sein, zu finden x , so dass h (x) = y
  • Keine zweite Urbild: gegeben x 1 , sollte es nicht möglich sein, zu finden x 2 (distinct von x 1 ), so dass h (x 1 ) = h (x 2 ) .
  • Keine Kollision: Es soll nicht möglich sein, jede zu finden x 1 und x 2 (verschieden von zueinander), so dass h (x 1 ) = h (x 2 ) .

Für eine Hash-Funktion mit einem n -Bit-Ausgang, gibt es generische Angriffe (die Arbeit unabhängig von den Details der Hash-Funktion) in 2 n Operationen für die ersten beiden Eigenschaften, und 2 n / 2 Operationen für die dritte. Wenn für eine bestimmte Hash-Funktion wird ein Angriff gefunden, die durch die Nutzung spezielle Einzelheiten, wie die Hash-Funktion arbeitet, ein Urbild findet, ein zweites Urbild oder eine Kollision schneller als der entsprechenden generische Angriff, dann wird die Hash-Funktion sagt werden "gebrochen".

Allerdings sind nicht alle Verwendungen von Hash-Funktionen stützen sich auf allen drei Eigenschaften. Zum Beispiel digitale Signaturen beginnen, indem die Daten, die Hashing signiert werden soll, und dann wird der Hash-Wert in dem Rest des Algorithmus verwendet. Dies beruht auf dem Widerstand gegen Urbilder und zweiten Urbilder, aber digitale Signaturen sind nicht per se durch Kollisionen betroffen. Kollisionen kann ein Problem in einigen spezifischen Signaturen Szenarien, wo der Angreifer bekommt die Daten zu wählen, die vom Opfer unterzeichnet werden soll (im Grunde berechnet der Angreifer eine Kollision, hat eine Nachricht vom Opfer unterzeichnet, und die Signatur wird gültig für die andere Nachricht als auch). Dies kann durch das Voranstellen einige zufällige Bytes an die signierte Nachricht entgegen gewirkt werden, bevor die Unterschrift Berechnung (den Angriff und die Lösung, wo im Rahmen von X.509-Zertifikaten gezeigt).

HMAC Sicherheit stützt sich auf eine andere Eigenschaft, dass die Hash-Funktion erfüllen muss; nämlich, dass die „Komprimierungsfunktion“ (der elementare Ziegel, auf das die Hash-Funktion eingebaut ist) wirkt als Pseudozufallsfunktion (PRF). Details darüber, was ein PRF ist recht technisch, aber, grob gesagt, eine PRF sollte von einem Random Oracle nicht zu unterscheiden sein. Ein zufälliges Orakel wird als Blackbox modelliert, die einen Gnom enthält, einig Würfel und ein großes Buch. Bei einigen Eingabedaten, wählen Sie das gnome eine zufällige Ausgabe (mit dem Würfel) und schreibt in dem Buch die Eingangsmeldung nach unten und der Ausgabe, die zufällig ausgewählt wurde. Der Gnom verwendet das Buch zu überprüfen, ob er bereits die gleiche Eingangsnachricht sah: wenn ja, dann der Gnom die gleiche Leistung als bisher zurückgibt. Durch die Konstruktion kann man nichts über den Ausgang eines zufälligen Orakel zu einer bestimmten Nachricht wissen, bis Sie es versuchen.

Das Random Oracle Modell ermöglicht es die HMAC Sicherheit Beweis in Anrufungen des PRF quantifiziert werden. Grundsätzlich ist der Beweis besagt, dass HMAC nicht ohne Berufung auf der PRF eine große Anzahl von Malen durchbrochen werden, und von „großem“ Ich meine rechen infeasible.

Leider haben wir nicht zufällig Orakel, so in der Praxis müssen wir Hash-Funktionen verwenden. Es gibt keinen Beweis dafür, dass Hash-Funktionen wirklich existieren, mit der PRF-Eigenschaft; jetzt haben wir nur Kandidaten, das heißt Funktionen, für die wir nicht beweisen, (noch) nicht, dass ihre Kompressionsfunktionen sind nicht PRF.

Wenn die Kompressionsfunktion eine PRF ist und die Hash-Funktion wird automatisch unempfindlich gegen Stöße. Das ist Teil der Magie von PRF. Deshalb , wenn wir Kollisionen für eine Hash-Funktion finden können, dann wissen wir, dass die interne Komprimierungsfunktion kein PRF ist. Dies lässt sich nicht einschalten, die Kollisionen in einen Angriff auf HMAC. Die Möglichkeit, Kollisionen nach Belieben erzeugen hilft nicht HMAC brechen. diese Kollisionen zeigen jedoch, dass die Sicherheit Beweis mit HMAC assoziiert gilt nicht. Die Garantie erlischt. Das ist genau das gleiche als ein Laptop-Computer. Öffnen des Gehäuses das Gerät nicht unbedingt brechen, aber danach sind Sie auf eigene Faust

In der Kim-Biryukov-Preneel-Hong Artikel, einige Angriffe auf HMAC sind vorgelegt, insbesondere ein fälschungs Angriff auf HMAC-MD4. Der Angriff nutzt die Mängel der MD4 (seine „Schwächen“), die einen nicht-PRF machen. Varianten der gleichen Schwächen wurden verwendet, um Kollisionen auf MD4 zu erzeugen (MD4 wird gründlich gebrochen, einige Angriffe erzeugen Kollisionen schneller als die Berechnung der Hash-Funktion selbst!). So sind die Kollisionen nicht unbedingt die HMAC-Angriff, aber beide Angriffe ernähren sich von der gleichen Quelle. Beachten Sie jedoch, dass die Fälschung Angriff hat Kosten 2 58 , die recht hoch ist (keine wirkliche Fälschung hergestellt wurde, ist das Ergebnis immer noch theoretische), aber wesentlich niedriger als der Widerstand Pegel von HMAC erwartet (mit einer robusten Hash-Funktion mit einer n -Bit-Ausgang sollte HMAC wieder bis 2 n Arbeitsfaktor; n = 128 für MD4).

So, während Kollisionen nicht per se implizieren Schwächen auf HMAC, sind sie eine schlechte Nachricht. In der Praxis Kollisionen ist ein Problem für sehr wenige Setups. Aber zu wissen, ob Kollisionen eine gegebene Verwendung von Hash-Funktionen auswirken ist schwierig genug, dass es ziemlich unklug ist, eine Hash-Funktion zu halten über die Verwendung, für die Kollisionen nachgewiesen wurden.

Für SHA-1, ist der Angriff noch theoretischer und SHA-1 ist weit verbreitet. Die Situation hat sich wie folgt beschrieben: „. Der Alarm ist eingeschaltet, aber es gibt keine sichtbare Feuer oder Rauch Es ist Zeit, zu den Ausgängen zu gehen - aber nicht zu laufen“

Weitere Informationen zu diesem Thema, zunächst das Kapitel liest 9 der Handbook of Applied Cryptography , von Menezes, van Oorschot und Vanstone, ein Muss für den Lehrling Kryptograph (nicht mit „Applied Cryptography“ von B. Schneier, die eine gut geschriebene Einführung ist aber wie die nirgends so gründlich verwechselt werden " Handbook ").

Andere Tipps

Die einzige Zeit, es sicher ist eine gebrochene Hashfunktion zu verwenden ist, wenn die Folgen einer Kollision sind harmlos oder trivial, z.B. wenn Dateien in einen Eimer auf einem Dateisystem zugeordnet wird.

Wenn Sie es egal, ob es sicher ist oder nicht.

Im Ernst, es braucht keinen zusätzlichen Aufwand eine sichere Hash-Funktion in so ziemlich jede Sprache zu verwenden, und Auswirkungen auf der Leistung ist vernachlässigbar, so sehe ich nicht, warum man es nicht.

[Edit nach Ihrer Frage tatsächlich zu lesen]

Nach Schneier einer Hash-Funktion anfällig für einen Angriff collsion kann immer noch als HMAC verwendet werden. Ich glaube, das liegt daran, dass die Sicherheit eines HMAC auf seinem geheimen Schlüssel abhängig ist und eine Kollision kann nicht gefunden werden, bis diese Taste erhalten wird.

Eigentlich ist es im Wesentlichen, weil die Lage, eine Kollision für einen Hash zu erzeugen, muss nicht unbedingt helfen, eine Kollision für das Hash-of-a-Hash (mit der XOR-Verknüpfung von HMACs kombination).

Ist es dann sicher zu einer sehr schwachen Nachricht für Passwörter verdauen wie md4 zu verwenden, wenn ein Salz, um das Passwort perpended wird?

Nein, nicht wenn der Hash hat eine Urbild Angriff , die Sie Daten vorangestellt wird ermöglicht, die Eingabe. Zum Beispiel, wenn die Hash-H(pass + salt) ist, würden wir einen Urbild Angriff benötigen, die uns pass2 so dass H(pass2 + salt) = H(pass + salt).

finden

Es wurden in der Vergangenheit append Angriffe, so bin ich sicher, prepend Angriffe sind möglich.

Download-Sites verwenden MD5-Hash als eine Prüfsumme, um festzustellen, ob die Datei während des Downloads beschädigt wurde, und ich würde sagen, ein gebrochenes Hash ist gut genug für diesen Zweck.

Lassen Sie uns sagen, dass eine MITM die Datei zu ändern entscheidet (sagen ein Zip-Archiv oder eine exe). Nun hat der Angreifer zwei Dinge zu tun -

  1. Finden Sie eine Hash-Kollision und erstellen Sie eine geänderte Datei draus
  2. Stellen Sie sicher, dass die neu erstellte Datei ist auch eine gültige exe oder ein Zip-Archiv

Mit einem gebrochenen Hash ist 1 ein bisschen einfacher. Aber dafür, dass die Kollision gleichzeitig andere bekannte Eigenschaften der Datei entspricht, ist zu teuer rechnerisch.

Das ist völlig meine eigene Antwort, und ich konnte schrecklich falsch sein.

Die Antwort hängt ganz davon ab, was Sie verwenden es für. Wenn Sie jemanden zu verhindern, um eine Kollision mit wenigen Millisekunden produzieren würde ich weniger als besorgt, wenn Sie jemanden verhindern, müssen eine Kollision innerhalb weniger Jahrzehnte zu erzeugen.

Was Problem versuchen Sie eigentlich zu lösen?

Die meisten der Sorge um so etwas wie MD4 für ein Kennwort mit weniger zu derzeit bekannten Angriffe im Zusammenhang, als die Tatsache, dass, sobald es auf den Punkt analysiert wurde, dass eine Kollision Generation ist einfach, ist es allgemein angenommen, wesentlich mehr zu sein wahrscheinlich, dass jemand, dieses Wissen zu nutzen, um einen Urbild Angriff zu schaffen -. und wenn / falls das passiert, im wesentlichen alle möglichen Verwendungen dieser Hash-Funktion anfällig

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top