Was dieses Tool macht
Berechnet den SHA-1-Hash beliebigen Texts oder Dateiinhalts im Browser und liefert einen 40-stelligen Hex-Digest. SHA-1 ist eine 160-Bit-Hashfunktion, 1995 vom NIST veröffentlicht (FIPS 180-1), entworfen von der NSA. Sie ist für Sicherheitszwecke deprecated: ein praktischer Kollisionsangriff ("SHAttered") wurde 2017 von Google und CWI Amsterdam demonstriert, Chosen-Prefix-Kollisionen folgten 2019. SHA-1 gilt nicht mehr als kryptografisch sicher.
Wo SHA-1 noch im Einsatz ist
- Git-Object-IDs. Jeder Git-Commit, Tree und Blob wird über seinen SHA-1-Hash identifiziert. Gits Object-Modell migriert zu SHA-256 (das Flag
--object-format=sha256existiert), aber SHA-1 bleibt der Default für die überwältigende Mehrheit der Repositories. Das Kollisionsrisiko für Commit-IDs ist real, aber gemanagt: GitHub und andere Forges deployen SHAttered-artige Detection (diesha1dc-Library), um vorbereitete Kollisionen zu erkennen. - Subversion (SVN). Gleiche Begründung wie git, weniger Migrationsdruck.
- Ältere TLS-Zertifikate. Browser haben SHA-1-signierten Zertifikaten 2017 das Vertrauen entzogen, aber Legacy-Systeme produzieren sie noch.
- Bestehender Code, der für nicht-sicherheitsrelevante Zwecke hasht. Cache-Keys, Fingerprints, Dedup-Tabellen — alles in Ordnung.
Wo SHA-1 ungeeignet ist
- Neue TLS-Zertifikate, Code-Signing-Zertifikate oder Dokumentsignaturen. SHA-256 oder SHA-384 verwenden.
- Passwort-Speicherung. Verwende einen langsamen, gesalzenen Hash wie bcrypt oder Argon2. SHA-1 ist zu schnell und nicht dafür entworfen.
- Alles, wo ein Angreifer die Eingabe wählen kann. Ein entschlossener Angreifer mit einem gemieteten Cluster kann eine SHA-1-Kollision in Tagen produzieren. Wenn dein Sicherheitsmodell zulässt, dass der Angreifer beeinflusst, was gehasht wird, ist SHA-1 gebrochen.
- Subresource Integrity (SRI). Browser akzeptieren SHA-1 in
integrity-Attributen, aber die Spezifikation empfiehlt mindestens SHA-256.
Test-Vektoren
Aus FIPS 180-2 und der SHA-1-Referenz-Suite:
- Leerer String
""→da39a3ee5e6b4b0d3255bfef95601890afd80709 "abc"→a9993e364706816aba3e25717850c26c9cd0d89d"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"→84983e441c3bd26ebaae4aa1f95129e5e54670f1"The quick brown fox jumps over the lazy dog"→2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
Hinweise
Warum 40 Zeichen? SHA-1 erzeugt 160 Bit = 20 Byte. 20 Byte × 2 Hex-Zeichen pro Byte = 40 sichtbare Zeichen.
Warum nutzt git SHA-1, wenn es gebrochen ist? Git nutzt SHA-1 als content-adressierten Identifier, nicht als Sicherheits-Primitive. Das Bedrohungsmodell ist "zwei wohlgeformte Objekte kollidieren versehentlich" — das ist weiterhin astronomisch unwahrscheinlich. Das Bedrohungsmodell ist nicht "ein Angreifer pusht einen bösartigen Commit, der denselben Hash hat wie dein echter Commit" — dafür nutzen GitHub etc. sha1dc, um SHAttered-artige Vorbereitungen zu erkennen und abzulehnen. Migration zu SHA-256 läuft, aber langsam, weil die Install-Base riesig ist.
Warum unterscheidet sich mein SHA-1 von sha1sum? Trailing-Newline. echo "hello" | sha1sum enthält das \n. Das Einfügen von "hello" hier nicht. echo -n oder den File-Picker verwenden.
Verwandte Tools
- Hash-Generator — fünf Hashes nebeneinander
- SHA-256 — der moderne Ersatz für SHA-1
- MD5 — der Vorgänger; noch gründlicher gebrochen