Anleitung
- Geben Sie Text ein, stellen Sie die Eingabe für Hex-Bytes auf „Hex“ um oder klicken Sie auf „Datei öffnen“.
- SHA-1 ist bereits vorausgewählt; ändern Sie die Auswahl unter „Algorithmus“, wenn Sie das Ergebnis mit einer anderen Hashfunktion vergleichen möchten.
- Wählen Sie unter „Ausgabe als“ „hex (Kleinbuchstaben)“ (wie bei sha1sum und Git), „HEX (Großbuchstaben)“ oder „Base64“.
- Fügen Sie einen erwarteten SHA-1-Wert in das Feld „Vergleichen mit“ ein; die Seite zeigt „Übereinstimmung“ oder „Keine Übereinstimmung“ an.
Was ist SHA-1?
SHA-1 (Secure Hash Algorithm 1) wurde von der NSA entwickelt und 1995 vom NIST als FIPS 180-1 veröffentlicht, als Ersatz für das kurzlebige SHA-0. Heute ist SHA-1 in FIPS 180-4 spezifiziert, und RFC 3174 beschreibt es mit C-Beispielcode. SHA-1 verarbeitet 512-Bit-Blöcke in 80 Runden und gibt einen 160-Bit-Hashwert aus: 40 Hex-Zeichen oder 28 Base64-Zeichen.
Wie jede Hashfunktion arbeitet SHA-1 nur in eine Richtung. Ein Hashwert lässt sich nicht entschlüsseln; man kann nur Kandidaten hashen und prüfen, ob das Ergebnis übereinstimmt. Genau so wurden die ungesalzenen SHA-1-Passwort-Hashes aus dem LinkedIn-Datenleck von 2012 massenhaft geknackt. Für Passwörter sind Argon2, scrypt, bcrypt oder PBKDF2 die richtige Wahl.
SHAttered: Warum SHA-1 als veraltet gilt
Im Februar 2017 veröffentlichten Forscher des CWI Amsterdam und von Google SHAttered, die erste echte SHA-1-Kollision: zwei verschiedene PDF-Dateien mit demselben Hashwert, gefunden mit rund 2^63 SHA-1-Berechnungen. 2020 demonstrierten Gaëtan Leurent und Thomas Peyrin („SHA-1 is a Shambles“) mit einer Chosen-Prefix-Kollision gefälschte SHA-1-Signaturen auf PGP-Schlüsseln, zu Kosten, die für einen finanzstarken Angreifer erschwinglich sind.
- Öffentliche Zertifizierungsstellen stellten 2016 die Ausgabe von SHA-1-TLS-Zertifikaten ein, und Browser vertrauen solchen Zertifikaten seit Anfang 2017 nicht mehr.
- Das NIST lässt SHA-1 seit 2013 nicht mehr für neue digitale Signaturen zu und will es bis Ende 2030 vollständig ausmustern.
- Die meisten Git-Repositorys identifizieren Objekte noch immer per SHA-1, berechnet mit einer gehärteten Implementierung, die Kollisionsversuche erkennt; Git kann aber auch Repositorys anlegen, die SHA-256 verwenden.
Kollisionen brechen HMAC nicht, daher findet sich HMAC-SHA1 weiterhin in TOTP-Codes und älteren Webhook-Signaturen; berechnen Sie es mit dem HMAC-Generator. Für alles Neue wählen Sie SHA-256.
Git-Objekt-IDs, Base64 und Zeichenkodierung
Eine Git-Blob-ID ist nicht einfach der SHA-1-Hashwert der Datei. Git hasht einen Header aus blob, einem Leerzeichen, der Größe in Bytes und einem Nullbyte, gefolgt vom Inhalt. Um das hier nachzuvollziehen, stellen Sie die Eingabe auf „Hex“ um und nehmen diese Header-Bytes mit auf: Für hello mit Zeilenumbruch lautet die Hex-Eingabe 626c6f6220360068656c6c6f0a.
$ printf 'hello\n' | sha1sum
f572d396fae9206628714fb2ce00f72e94f2258f -
$ printf 'hello\n' | git hash-object --stdin
ce013625030ba8dba906f756967f9e9ca394464a
SHA-1 wird meist als Hex in Kleinbuchstaben angezeigt. Base64 begegnet Ihnen im WebSocket-Handshake, wo Sec-WebSocket-Accept der Base64-kodierte SHA-1-Hashwert aus Client-Schlüssel und einer festen GUID ist, sowie bei LDAP-Passwortwerten im Format {SHA}. Denken Sie daran, dass der Hashwert über Bytes berechnet wird: Text mit Umlauten oder Akzenten ergibt in UTF-8 einen anderen SHA-1-Hashwert als in Windows-1252.
SHA-1 auf der Kommandozeile und im Code
sha1sum file.zip # Linux
shasum file.zip # macOS (SHA-1 ist Standard)
certutil -hashfile file.zip SHA1 # Windows
Get-FileHash file.zip -Algorithm SHA1 # PowerShell
# Python
hashlib.sha1(data).hexdigest()
// Node.js
crypto.createHash('sha1').update(data).digest('hex')
Diese Seite berechnet SHA-1 mit der in Ihren Browser integrierten Web Crypto API, sodass die Eingabe Ihr Gerät nie verlässt. Die Tabelle „Alle Algorithmen“ zeigt die MD5-, SHA-256-, SHA-384-, SHA-512- und CRC-Werte derselben Eingabe.
Beispiele
| Eingabe (UTF-8) | SHA-1 |
|---|---|
Hello, World! | 0a0a9f2a6772942557ab5355d76af442f8f65e01 |
Base64.is | 6c667ee2efd2020349eed40efa07c26683f613c8 |
你好 | 440ee0853ad1e99f962b63e459ef992d7c211722 |
Häufig gestellte Fragen
Ist SHA-1 noch sicher?
Nicht dort, wo ein Angreifer die Eingabe wählen oder beeinflussen kann, etwa bei Signaturen und Zertifikaten, denn SHA-1-Kollisionen lassen sich erzeugen. Versehentliche Beschädigungen erkennt SHA-1 weiterhin, und HMAC-SHA1 ist von Kollisionen nicht betroffen. Für neue Projekte verwenden Sie SHA-256 oder SHA-512.
Lässt sich ein SHA-1-Hashwert umkehren?
Nein. Es gibt weder einen Schlüssel noch eine Entschlüsselung. Nachschlage-Websites finden nur Eingaben, die bereits in ihren Tabellen mit gängigen Wörtern und geleakten Passwörtern stehen. Deshalb ist eine lange zufällige Eingabe vor ihnen sicher, ein kurzes Passwort dagegen nicht.
Wie lang ist ein SHA-1-Hashwert?
=. RIPEMD-160 hat dieselbe Länge, und Passwort-Hashes ab MySQL 4.1 bestehen aus einem Sternchen, gefolgt von 40 Hex-Zeichen. Die Hash-Erkennung listet die infrage kommenden Algorithmen für einen bestimmten String auf.Wie prüfe ich eine Datei gegen einen veröffentlichten SHA-1-Wert?
Öffnen Sie die Datei mit „Datei öffnen“ und fügen Sie dann den veröffentlichten Wert in das Feld „Vergleichen mit“ ein. Hex in Groß- oder Kleinbuchstaben und Base64 werden gleichermaßen akzeptiert, und die Seite zeigt „Übereinstimmung“ oder „Keine Übereinstimmung“ an.
Was ist der Unterschied zwischen SHA-1 und SHA-256?
Beide wurden vom NIST veröffentlicht, doch SHA-256 gehört zur neueren SHA-2-Familie, hat eine 256-Bit-Ausgabe, und es sind keine praktischen Angriffe darauf bekannt. SHA-1 hat eine kürzere Ausgabe, und seine Kollisionsresistenz ist gebrochen.