Hashfunktionen erklärt
Eine Hashfunktion macht aus einer beliebigen Eingabe einen kurzen Fingerabdruck fester Länge. Diese Anleitung erklärt, wofür MD5, SHA-1 und SHA-256 nützlich sind, wo ihre Grenzen liegen und wie Sie eine Datei mit einer veröffentlichten Prüfsumme vergleichen.
Was ein Hash ist
Eine kryptografische Hashfunktion liest Daten beliebiger Größe und erzeugt einen Hashwert fester Länge: 128 Bit bei MD5, 160 Bit bei SHA-1 und 256 Bit bei SHA-256, meist als hexadezimaler Text dargestellt. Dieselbe Eingabe ergibt jedes Mal denselben Hashwert, und schon die Änderung eines einzigen Bits der Eingabe erzeugt einen völlig anderen Hashwert. Ein Hash ist eine Einwegfunktion: Aus dem Hashwert lässt sich die Eingabe nicht zurückgewinnen, außer indem man Eingaben errät und die Ergebnisse vergleicht.
Diese Anleitung bietet allgemeine Informationen. Folgen Sie bei Sicherheitsentscheidungen den Vorgaben Ihrer Organisation oder des Dienstes, mit dem Sie arbeiten.
Prüfsummen und Integrität
Die häufigste alltägliche Verwendung ist die Prüfung, ob eine Datei unversehrt angekommen ist. Eine Download-Seite kann neben der Datei einen SHA-256-Wert veröffentlichen. Nach dem Download berechnen Sie den Hash Ihrer Kopie und vergleichen ihn mit dem veröffentlichten. Stimmen die Werte überein, ist die Datei sehr wahrscheinlich identisch mit der, die der Herausgeber gehasht hat; weichen sie ab, ist der Download beschädigt oder die Datei eine andere Version.
Eine Prüfsumme hilft nur, wenn dem veröffentlichten Wert selbst vertraut werden kann. Kann ein Angreifer sowohl die Datei als auch die Prüfsumme auf derselben Seite ändern, beweist ein übereinstimmender Hash wenig. Digitale Signaturen lösen dieses Problem.
Warum MD5 und SHA-1 nicht für Sicherheitszwecke geeignet sind
Ein sicherer Hash sollte es praktisch unmöglich machen, zwei verschiedene Eingaben mit demselben Hashwert (eine Kollision) zu finden. Für MD5 und SHA-1 wurden praktisch durchführbare Kollisionsangriffe veröffentlicht, sodass ein Angreifer zwei verschiedene Dateien mit demselben Hash vorbereiten kann. Deshalb gelten sie für digitale Signaturen, Zertifikate und andere Sicherheitszwecke nicht mehr als geeignet.
MD5 und SHA-1 können versehentliche Beschädigungen weiterhin erkennen, und manche älteren Systeme veröffentlichen sie. Für neue Projekte ist SHA-256 oder ein anderes Mitglied der SHA-2-Familie (SHA-384, SHA-512) die übliche Wahl.
| Algorithmus | Länge des Hashwerts | Sicherheitsstatus |
|---|---|---|
| MD5 | 128 Bit (32 Hex-Zeichen) | Kollisionsresistenz gebrochen; nur noch für Prüfsummen in Altsystemen |
| SHA-1 | 160 Bit (40 Hex-Zeichen) | Kollisionsresistenz gebrochen; nur noch in Altsystemen |
| SHA-256 | 256 Bit (64 Hex-Zeichen) | Weit verbreitet und empfohlen |
| SHA-384 / SHA-512 | 384 / 512 Bit | Weit verbreitet und empfohlen |
Hashing ist keine Verschlüsselung, und Passwörter brauchen mehr
Verschlüsselung lässt sich mit dem richtigen Schlüssel umkehren; Hashing ist nicht dafür gedacht, umgekehrt zu werden. Kurze oder vorhersehbare Eingaben verbirgt ein Hash allerdings nicht: Jeder kann gängige Wörter oder Telefonnummern hashen und nach einer Übereinstimmung suchen.
Deshalb sind schnelle Hashes wie MD5 oder SHA-256 allein nicht zum Speichern von Passwörtern geeignet. Sie sind auf Geschwindigkeit ausgelegt, sodass ein Angreifer sehr viele Rateversuche schnell testen kann. Für die Speicherung von Passwörtern werden langsame, gesalzene Algorithmen verwendet, die dafür entwickelt wurden, etwa Argon2, scrypt oder bcrypt. Wenn Sie ein Login-System bauen, verwenden Sie statt eines allgemeinen Hashs eine gepflegte Bibliothek und die aktuellen Empfehlungen für Ihre Plattform.
HMAC zur Nachrichtenauthentifizierung
Ein einfacher Hash zeigt, ob sich Daten geändert haben, aber jeder kann ihn neu berechnen. HMAC (Hash-based Message Authentication Code) kombiniert die Daten mit einem geheimen Schlüssel, zum Beispiel HMAC-SHA256. Nur wer den Schlüssel kennt, kann den richtigen Wert erzeugen, sodass der Empfänger prüfen kann, ob eine Nachricht von einem Schlüsselinhaber stammt und nicht verändert wurde. Webhooks und das Signieren von API-Anfragen verwenden häufig HMAC. Halten Sie den Schlüssel geheim; wer ihn besitzt, kann gültige Codes erzeugen.
Warum derselbe Text einen anderen Hash ergibt
Ein Hash wird über Bytes berechnet, nicht über den Text, den Sie sehen. Diese Unterschiede verändern das Ergebnis:
- Zeilenenden: Windows verwendet CR LF, Linux und macOS verwenden LF.
- Zeichenkodierung: „é“ besteht in UTF-8 aus anderen Bytes als in älteren Kodierungen.
- Ein abschließender Zeilenumbruch oder ein Leerzeichen am Ende oder eine Byte-Order-Mark am Anfang einer Datei.
- Groß- oder Kleinschreibung in der Eingabe.
Wenn ein Hash nicht übereinstimmt, prüfen Sie zuerst diese Punkte. Die Originaldatei zu hashen ist meist zuverlässiger, als daraus kopierten Text zu hashen. Bei der Hex-Ausgabe selbst spielt die Groß-/Kleinschreibung keine Rolle: A1B2 und a1b2 sind derselbe Wert.
Häufige Fragen
Kann ich einen MD5- oder SHA-256-Hash entschlüsseln?
Nein. Ein Hash ist keine verschlüsselte Information. Online-Dienste zum „Entschlüsseln“ schlagen vorberechnete Hashes gängiger Eingaben nach – deshalb bieten Hashes einfacher Werte wenig Schutz.
Welchen Algorithmus sollte ich zur Prüfung eines Downloads verwenden?
Verwenden Sie den, den der Herausgeber angibt. Werden mehrere angeboten, ist SHA-256 oder SHA-512 die bessere Wahl als MD5 oder SHA-1.
Lädt der Hash-Generator meine Datei hoch?
Der LeedyBox-Hash-Generator berechnet Hashes in Ihrem Browser, daher werden der ausgewählte Text oder die ausgewählte Datei auf Ihrem Gerät verarbeitet.