MD5 vs SHA-1 vs SHA-2 - Welches ist der sicherste Verschlüsselungs-Hash und wie man sie überprüft

Was ist eine Hash-Funktion?

Eine Hash-Funktion verwendet einen Eingabewert (z. B. eine Zeichenfolge) und gibt einen Wert fester Länge zurück. Eine ideale Hash-Funktion hat die folgenden Eigenschaften:

  • es ist sehr schnell
  • Es kann einen enormen Bereich von Hash-Werten zurückgeben
  • Es generiert einen eindeutigen Hash für jede eindeutige Eingabe (keine Kollisionen).
  • Es werden unterschiedliche Hashwerte für ähnliche Eingabewerte generiert
  • Generierte Hash-Werte haben kein erkennbares Muster in ihrer Verteilung

Natürlich gibt es keine ideale Hash-Funktion, aber jede zielt darauf ab, so nah wie möglich am Ideal zu arbeiten. Da (die meisten) Hash-Funktionen Werte fester Länge zurückgeben und der Wertebereich daher eingeschränkt ist, kann diese Einschränkung praktisch ignoriert werden. Die Anzahl der möglichen Werte, die beispielsweise von einer 256-Bit-Hash-Funktion zurückgegeben werden können, entspricht in etwa der Anzahl der Atome im Universum.

Im Idealfall gibt eine Hash-Funktion praktisch keine Kollisionen zurück - das heißt, keine zwei verschiedenen Eingaben erzeugen den gleichen Hash-Wert. Dies ist besonders wichtig für kryptografische Hash-Funktionen: Hash-Kollisionen gelten als Sicherheitslücke.

Schließlich sollte eine Hash-Funktion unvorhersehbar unterschiedliche Hash-Werte für jeden Eingabewert generieren. Nehmen Sie zum Beispiel die folgenden zwei sehr ähnlichen Sätze:

1. "The quick brown fox." 2. "The quick brown fax." 

Wir können die MD5-Hashwerte vergleichen, die aus jedem der beiden Sätze generiert wurden:

1. 2e87284d245c2aae1c74fa4c50a74c77 2. c17b6e9b160cda0cf583e89ec7b7fc22 

Für zwei ähnliche Sätze wurden zwei sehr unterschiedliche Hashes generiert. Diese Eigenschaft ist sowohl für die Validierung als auch für die Kryptografie nützlich. Dies ist eine Folge der Verteilung: Die Hash-Werte aller Eingaben sollten gleichmäßig und unvorhersehbar über den gesamten Bereich möglicher Hash-Werte verteilt sein.

Allgemeine Hash-Funktionen

Es gibt mehrere Hash-Funktionen, die weit verbreitet sind. Alle wurden von Mathematikern und Informatikern entworfen. Im Laufe der weiteren Forschung wurde gezeigt, dass einige Schwächen aufweisen, obwohl alle für nicht verschlüsselte Anwendungen als gut genug angesehen werden.

MD5

Die MD5-Hash-Funktion erzeugt einen 128-Bit-Hashwert. Es wurde für die Verwendung in der Kryptografie entwickelt, aber im Laufe der Zeit wurden Schwachstellen entdeckt, sodass es für diesen Zweck nicht mehr empfohlen wird. Es wird jedoch weiterhin für die Datenbankpartitionierung und die Berechnung von Prüfsummen zur Validierung von Dateiübertragungen verwendet.

SHA-1

SHA steht für Secure Hash Algorithm. Die erste Version des Algorithmus war SHA-1, später folgte SHA-2 (siehe unten).

Während MD5 einen 128-Bit-Hash erzeugt, erzeugt SHA1 einen 160-Bit-Hash (20 Bytes). Im Hexadezimalformat ist es eine 40-stellige Ganzzahl. Wie MD5 wurde es für Kryptologieanwendungen entwickelt, es stellte sich jedoch bald heraus, dass es auch Schwachstellen aufweist. Ab heute gilt es nicht mehr als weniger angriffsresistent als MD5.

SHA-2

Die zweite Version von SHA, SHA-2 genannt, hat viele Varianten. Wahrscheinlich wird am häufigsten SHA-256 verwendet, das vom Nationalen Institut für Standards und Technologie (NIST) anstelle von MD5 oder SHA-1 empfohlen wird.

Der SHA-256-Algorithmus gibt einen Hashwert von 256 Bit oder 64 hexadezimalen Ziffern zurück. Aktuelle Forschungsergebnisse zeigen, dass es zwar nicht ganz perfekt ist, aber wesentlich sicherer als MD5 oder SHA-1.

In Bezug auf die Leistung ist ein SHA-256-Hash etwa 20 bis 30% langsamer zu berechnen als MD5- oder SHA-1-Hashes.

SHA-3

Diese Hash-Methode wurde Ende 2015 entwickelt und ist noch nicht weit verbreitet. Sein Algorithmus hat nichts mit dem seines Vorgängers SHA-2 zu tun.

Der SHA3-256-Algorithmus ist eine Variante, deren Anwendbarkeit der des früheren SHA-256 entspricht, wobei die Berechnung des ersteren etwas länger dauert als die des späteren.

Verwenden von Hash-Werten zur Validierung

Eine typische Verwendung von Hash-Funktionen ist die Durchführung von Validierungsprüfungen. Eine häufige Verwendung ist die Validierung komprimierter Dateisammlungen wie ZIP- oder TAR-Archivdateien.

Angesichts eines Archivs und seines erwarteten Hashwerts (üblicherweise als Prüfsumme bezeichnet) können Sie Ihre eigene Hash-Berechnung durchführen, um zu überprüfen, ob das erhaltene Archiv vollständig und unbeschädigt ist.

Zum Beispiel kann ich eine MD5-Prüfsumme für eine TAR-Datei in Unix mit den folgenden Piped-Befehlen generieren:

tar cf - files | tee tarfile.tar | md5sum - 

Verwenden Sie den Befehl Get-FileHash PowerShell, um den MD5-Hash für eine Datei in Windows abzurufen:

Get-FileHash tarfile.tar -Algorithm MD5 

Die generierte Prüfsumme kann auf der Download-Site neben dem Link zum Herunterladen des Archivs veröffentlicht werden. Der Empfänger kann nach dem Herunterladen des Archivs überprüfen, ob es korrekt gefunden wurde, indem er den folgenden Befehl ausführt:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -c 

Dabei ist 2e87284d245c2aae1c74fa4c50a74c77 die generierte Prüfsumme, die gebucht wurde. Die erfolgreiche Ausführung des obigen Befehls generiert einen OK-Status wie folgt:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -ctarfile.tar: OK