Hallo suit,
Wird zum einen von PHP direkt unterstützt (Funktion sha1()) und es existieren noch keine praktikablen Angriffe.
Auch für MD5 existieren (immer noch nicht) keine praktikablen Angriffe, die es ermöglichen, einen der möglichen Klartexte eines Hashes zu berechnen.
Schrieb ich ja auch. Aber MD5 hat Gegenüber SHA-1 zwei Nachteile:
1. Die Bitlänge ist geringer (128 bit vs. 160 bit). Wenn sich jetzt ein
Angriff um den Faktor 2^64 beschleunigen ließe, hätte man bei SHA-1
immer noch eine effektive Bitlänge von 2^96 bit während das bei MD5
nur noch 2^64 wären. Nur mal als Rechenbeispiel.
2. Du hast natürlich vollkommen Recht, dass es keine Angriffe auf MD5
gibt, die beim Passwortknacken helfen. Mein Argument ist jedoch, dass
auf Grund der Tatsache, dass sich andere Angriffe als praktikabel
herausgestellt haben, es bei MD5 in meinen Augen viel wahrscheinlicher
ist, in naher Zukunft einen praktikablen (!) Angriff zu finden, als
bei SHA-1. Es könnte selbstverständlich auch anders herum sein, das
will ich nicht bezweifeln. Mein Wahrscheinlichkeitsargument bricht
deswegen trotzdem nicht zusammen.
Natürlich hat auch SHA-1 Schwächen, Bruce Schneier hat ja schon vor Jahren davon abgeraten, deswegen verwies ich ja auch auf Alternativen. Und ich bin garantiert niemand, der jetzt aufschreit, dass man MD5 sofort ersetzen müsste, wenn es für's Passwort-Hashing verwendet wird. Mein Argument ist aber ganz simpel: Wenn man eine NEUE Software schreibt, die keine (!) Kompabilität zu alten Systemen berücksichtigen muss, dann sollte man den stärksten Hash-Algorithmus nehmen, der aktuell bekannt ist und für dieses System noch sinnvoll ist. In dem Fall wäre das vermutlich SHA-256 [1]. Allerdings ist das in diesen Gegebenheiten (PHP) problematisch, weil PHP von Haus aus keine Funktion für SHA-256 mitbringt und die Erweiterung nicht überall installiert ist. Daher muss man sich hier aus praktischen Erwägungen auf MD5 und SHA-1 beschränken. Und in dieser Situation sollte man in meinen Augen den besseren Algorithmus der beiden verwenden, nämlich SHA-1. Mehr wollte ich nicht sagen.
Den einzigen Vorteil, den man durch SHA-1 erhält: man verschleiert den Algorithmus - dass das keine Sicherheit bedeutet, sollte aber klar sein.
Warum verschleiert man den Algorithmus? SHA-1 ist doch auch öffentlich? Und ein 160bit-Hash in freier Wildbahn ist fast immer SHA-1 und sonst RIPEMD-160. Der Rest ist bei dieser Bitlänge vernachlässigbar.
Viele Grüße,
Christian
[1] Sobald die SHA-3-Competition zu Ende ist, gilt diese Aussage natürlich nicht mehr.