Ein Hash (oder Hash-Digest) ist eine Zeichenkette fester Größe, die von einer Hash-Funktion aus Eingabedaten beliebiger Größe erzeugt wird. Hash-Funktionen sind mathematische Einwegfunktionen — bei einer beliebigen Eingabe können Sie sofort den Hash berechnen, aber Sie können den Vorgang nicht umkehren, um die Originaldaten wiederherzustellen. Dieselbe Eingabe erzeugt immer dieselbe Ausgabe, und selbst eine einzelne Zeichenänderung führt zu einem völlig anderen Ergebnis.
Möchten Sie einen Hash für eine Zeichenkette oder Datei berechnen?
Hash-Generator öffnen →Hash-Funktionen haben ihre Wurzeln im Jahr 1953, als Hans Peter Luhn bei IBM eines der frühesten Hashing-Konzepte für den Datenabruf beschrieb. Kryptografisches Hashing entstand in den 1970er Jahren zusammen mit der Public-Key-Kryptografie als formale Disziplin. Wichtige Meilensteine sind MD5 (1991, Ron Rivest), der SHA-1-Standard (1995, NSA/NIST) und die SHA-2-Familie (2001, NSA/NIST), die SHA-256 und SHA-512 einführte. Im Jahr 2012 standardisierte NIST SHA-3 (Keccak) als Alternative mit einer völlig anderen internen Konstruktion. Für das Passwort-Hashing führte bcrypt (1999, Niels Provos & David Mazières) absichtliche Langsamkeit ein, und Argon2 gewann 2015 den Password Hashing Competition und fügte Memory-Hardness gegen GPU-Angriffe hinzu.
Eine Hash-Funktion nimmt eine Eingabe beliebiger Länge und erzeugt eine Ausgabe fester Länge (den Digest). Vier Schlüsseleigenschaften definieren eine kryptografische Hash-Funktion:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("Hello") = 185f8db32921bd46d35b97f9c798b7d00b6c5fb5f0c2c3f0c3f2f1e2d1c0b9a8
SHA-256("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Von Ron Rivest im Jahr 1991 entwickelt. Erzeugt einen 128-Bit-Digest (32 Hex-Zeichen). MD5 ist kryptografisch gebrochen — praktische Kollisionsangriffe wurden seit 2004 demonstriert, und 2008 wurde mithilfe von MD5-Kollisionen ein gefälschtes SSL-Zertifikat erstellt. Es sollte niemals für Sicherheitszwecke verwendet werden. Für Nicht-Sicherheits-Prüfsummen noch akzeptabel (z. B. zur Überprüfung, ob ein Dateidownload nicht durch Übertragungsfehler beschädigt wurde, nicht durch Manipulation).
MD5("hello") = 5d41402abc4b2a76b9719d911017c592
Von NIST im Jahr 1995 veröffentlicht. Erzeugt einen 160-Bit-Digest (40 Hex-Zeichen). SHA-1 ist für alle Sicherheitsanwendungen veraltet — Google demonstrierte 2017 einen praktischen Kollisionsangriff (SHAttered). Browser und Zertifizierungsstellen haben aufgehört, SHA-1-Zertifikate zu akzeptieren. Git verwendete historisch SHA-1 für Objekt-IDs (migriert jetzt zu SHA-256).
SHA-1("hello") = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Von NIST im Jahr 2001 veröffentlicht. Die SHA-2-Familie ist der aktuelle Standard für die meisten kryptografischen Anwendungen. SHA-256 erzeugt einen 256-Bit-Digest (64 Hex-Zeichen) und wird in TLS-Zertifikaten, Bitcoin-Mining, JWT-Signaturen und Code-Signing verwendet. SHA-512 erzeugt einen 512-Bit-Digest und ist für große Eingaben auf 64-Bit-Hardware schneller als SHA-256.
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-512("hello") = 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
Von NIST im Jahr 2015 nach einem öffentlichen Wettbewerb standardisiert. SHA-3 verwendet eine grundlegend andere interne Konstruktion (Schwammfunktion) im Vergleich zur Merkle–Damgård-Konstruktion von SHA-2. Das bedeutet, dass SHA-3 auch dann sicher bleibt, wenn eine Schwäche in SHA-2 gefunden würde. SHA-3 ist auf den meisten CPUs nicht schneller als SHA-2, bietet aber eine wichtige Alternative mit unabhängigen Sicherheitseigenschaften.
1999 von Niels Provos und David Mazières speziell für das Passwort-Hashing entwickelt. bcrypt enthält automatisch ein zufälliges Salt (verhindert vorberechnete Rainbow-Table-Angriffe) und einen konfigurierbaren Kostenfaktor, der steuert, wie langsam die Funktion ist. Wenn sich die Hardware verbessert, erhöhen Sie einfach den Kostenfaktor. Die bcrypt-Ausgabe enthält das Salt und den Kostenfaktor, sodass der Hash in sich abgeschlossen und portabel ist.
bcrypt("password", cost=12) =
$2b$12$EXRkfkdmXn2gzds2SSitu.MW9.TNJjKVvljQQnqPDFT9cNBivgNS2
Gewinner des Password Hashing Competition im Jahr 2015. Argon2 fügt Memory-Hardness hinzu — ein Angreifer benötigt zusätzlich zur CPU-Zeit eine konfigurierbare Menge RAM, was GPU- und ASIC-Brute-Force-Angriffe viel teurer macht. Es gibt drei Varianten: Argon2d (GPU-resistent), Argon2i (Seitenkanal-resistent) und Argon2id (Hybrid — für die meisten Anwendungsfälle empfohlen). Argon2 ist die empfohlene Wahl für neue Anwendungen.
HMAC (Hash-basierter Message Authentication Code) kombiniert eine beliebige Hash-Funktion mit einem geheimen Schlüssel, um einen Message Authentication Code zu erzeugen. HMAC überprüft sowohl die Datenintegrität (die Nachricht wurde nicht verändert) als auch die Authentizität (nur jemand mit dem Schlüssel könnte sie erzeugt haben). HMAC-SHA256 wird in JWT-HS256-Signaturen, API-Anfragensignierung und Webhook-Payload-Verifizierung verwendet.
HMAC-SHA256(key="secret", message="hello") =
88aab3ede8d3adf94d26ab90d3bafd4a2083070c3bcce9c014ee04a443847c0b
Ein Hash (oder Hash-Digest) ist eine Zeichenkette fester Größe, die von einer Hash-Funktion aus Eingabedaten beliebiger Größe erzeugt wird. Hash-Funktionen sind Einwegfunktionen — Sie können den Hash aus der Eingabe berechnen, aber Sie können die Eingabe nicht aus dem Hash rekonstruieren. Dieselbe Eingabe erzeugt immer dieselbe Ausgabe.
MD5 erzeugt einen 128-Bit-Digest und ist kryptografisch gebrochen — Kollisionsangriffe wurden demonstriert. SHA-256 ist Teil der SHA-2-Familie, erzeugt einen 256-Bit-Digest und bleibt für die meisten Zwecke sicher. Keiner von beiden sollte allein zum Hashen von Passwörtern verwendet werden; verwenden Sie stattdessen bcrypt oder Argon2.
SHA-256 ist darauf ausgelegt, schnell zu sein, was es leicht macht, per Brute-Force anzugreifen — moderne GPUs können Milliarden von SHA-256-Hashes pro Sekunde berechnen. Passwort-Hashing-Algorithmen wie bcrypt und Argon2 sind absichtlich langsam und enthalten ein zufälliges Salt, um vorberechnete Rainbow-Table-Angriffe zu verhindern.
Beide sind für das Passwort-Hashing konzipiert und beinhalten Salting. bcrypt (1999) hat einen konfigurierbaren Kostenfaktor zur Steuerung der Geschwindigkeit. Argon2 (2015) fügt Memory-Hardness hinzu — Angreifer benötigen zusätzlich zur CPU-Zeit große Mengen RAM, was GPU- und ASIC-Angriffe viel teurer macht. Argon2id ist die empfohlene Wahl für neue Systeme.
Eine Hash-Kollision tritt auf, wenn zwei verschiedene Eingaben dieselbe Hash-Ausgabe erzeugen. Eine sichere Hash-Funktion macht es rechnerisch unmöglich, solche Kollisionen zu finden. MD5 und SHA-1 sind gebrochen, weil praktische Kollisionen demonstriert wurden; SHA-256 und SHA-3 bleiben kollisionsresistent.
HMAC (Hash-basierter Message Authentication Code) kombiniert eine Hash-Funktion mit einem geheimen Schlüssel, um einen Message Authentication Code zu erzeugen. Es überprüft sowohl die Datenintegrität als auch die Authentizität. HMAC-SHA256 wird in JWT-HS256-Signaturen, API-Anfragensignierung und Webhook-Verifizierung verwendet.