Wie entschlüsselt man einen SHA-256-Hash zurück zur ursprünglichen Eingabe?
Kurzantwort
Gar nicht — kryptografische Hashes sind Einwegfunktionen ohne Inverse. Einen Hash zu „cracken“ heißt, Kandidaten-Eingaben zu raten, jede zu hashen und zu vergleichen (Wörterbuch, Brute Force, Rainbow Tables), und genau deshalb nutzt man langsame, gesalzene Hashes für Passwörter. Es gibt keinen Schlüssel, der einen Hash „entschlüsselt“. Wenn sich etwas entschlüsseln lässt, wurde es verschlüsselt, nicht gehasht — und Base64 ist umkehrbare Kodierung, kein Hashing.
Dies ist eine klassische Junior-Falle. Die Formulierung „einen Hash entschlüsseln“ klingt vernünftig, ist aber ein Kategoriefehler: Hashing und Verschlüsselung sind verschiedene Operationen, und nur eine davon ist umkehrbar.
Hashing ist von Natur aus einseitig
SHA-256 bildet eine Eingabe beliebiger Größe auf ein festes 256-Bit-Digest ab, indem es die Daten wiederholt vermischt und komprimiert. Die Funktion wirft bewusst Information weg — viele verschiedene Eingaben ergeben eine Ausgabe gleicher Länge — daher gibt es keine mathematische Inverse zum Ausführen. Diese Eigenschaft heißt Urbildresistenz: Aus einem Digest kannst du keine Eingabe berechnen, die es erzeugt. Zudem ist kein Schlüssel im Spiel, also gibt es nichts, womit man „entschlüsseln“ könnte.
Was „Cracken“ wirklich tut
Wenn Werkzeuge einen Hash scheinbar „umkehren“, raten sie. Der erste Schritt ist, den Algorithmus zu erkennen — genau das leistet ein Online-Hash-Identifizierer —, danach nimmt der Angreifer Kandidaten-Eingaben — Wörter aus einem Wörterbuch, Mutationen oder per Brute Force erzeugte Zeichenketten — hasht jede und prüft, ob das Digest passt. Eine Rainbow Table ist nur dieses Raten, im Voraus erledigt und geschickt gespeichert. Nichts davon kehrt die Funktion um; es durchsucht den Eingaberaum. Genau deshalb werden Passwörter mit langsamen, gesalzenen Hashes (bcrypt, scrypt, Argon2) gespeichert: um jeden Versuch teuer zu machen.
Verschlüsselung, Kodierung und Hashing
Die Distraktoren stützen sich auf drei Verwechslungen:
- Verschlüsselung ist umkehrbar mit einem Schlüssel (AES, RSA). Wenn du es entschlüsseln kannst, wurde es verschlüsselt, nicht gehasht.
- Kodierung wie Base64 ist umkehrbar ohne Schlüssel — ein Darstellungswechsel, gar keine Sicherheit. Base64-Dekodierung stellt nie eine gehashte Eingabe wieder her.
- Hashing ist einseitig und schlüssellos.
Die Antwort „inverse Rundenfunktion anwenden“ ist ebenfalls falsch: SHA-256s Kompressionsfunktion ist nicht so umkehrbar, dass sie die Nachricht wiederherstellt, und die Blockgröße zu kennen bringt nichts.
Die richtige Interview-Antwort
Sag klar, dass man einen Hash nicht entschlüsseln kann, weil er weder Inverse noch Schlüssel hat; der einzige Weg ist raten und vergleichen. Ergänze dann die Sicherheitsimplikation: Da Raten der einzige Angriff ist, machen Verteidiger das Raten mit adaptiven gesalzenen Hashes langsam und pro Datensatz eindeutig.
Wahrscheinliche Anschlussfragen
- Was ist der Unterschied zwischen Verschlüsselung, Kodierung und Hashing?
- Wie „kehren“ Rainbow Tables einen Hash um, wenn Hashing keine Inverse hat?
- Warum verlangsamt ein Salt Angriffe, die viele Hashes gleichzeitig cracken?