Kann man einen SHA256 Hash zurückübersetzen?

CyborgBeta schrieb:
Und praktisch gesehen, wie lange dauert es, alle Eingabekombinationen der Länge n zurückzuübersetzen?
Ergänzung ()
Falsche Frage, frag dich lieber ob es mit den derzeitig bekannten Verfahren genügend Energie im derzeit bekannten Universum gibt um alle Möglichkeiten zu probieren.
 
  • Gefällt mir
Reaktionen: fax668, CyborgBeta und madmax2010
Für Hash-Funktionen gibt es verschiedene Einsatzbereiche.
In dieser Diskussion liegt der Fokus auf der Verwendung innerhalb von Kryptographie, mein Fokus dieser Beschreibung liegt entsprechend auch auf dieser Verwendungsart.

In möglichst einfachen Worten:
Eine Hash-Funktion ist eine Einwegfunktion, die Input beliebiger länge entgegennimmt und davon Output einer festen Länge generiert.

Hierbei sollte ein Ungleichgewicht zwischen Input und Output auffallen, da es, theoretisch, unendlich viele Möglichkeiten für den Input (er ist von der Länge her unbegrenzt), aber nur endlich viele Abbilder für den Output gibt.
Führen zwei oder mehrere verschiedene Inputs zum selben Output, so nennt sich das "Kollision".
Gute Hash-Funktionen zeichnen sich dabei darüber aus, dass sie besonders für ähnlichen Input, aber auch für jeglichen anderen, erwartbaren Input möglichst wenig Kollisionen generieren.

Darüber hinaus ist ein Hash-Algorithmus so designt, dass
  • jederzeit für denselben Input immer auch derselbe Output berechnet werden wird,
  • er möglichst einfach und schnell berechnet werden kann und
  • es unmöglich ist, einen Algorithmus zu formulieren, der als Umkehrfunktion einen Output zu einem Input "zurückrechnen" könnte. (Im Kontrast dazu sind Verschlüsselungsalgorithmen immer so designt, dass es eine Umkehrfunktion gibt, sodass jederzeit "Input -> Output" und auch "Output -> Input" berechnet werden kann.)
Eine Hash-Funktion eignet sich nicht für Verschlüsselungen, da es entweder gar nicht oder nur mit enormem Aufwand möglich ist, den Input von einem Output herauszufinden.
Hash-Funktionen in der Kryptographie dienen meist der Integritätsprüfung von Inhalten oder über spezielle Passwort-Hash-Funktionen (Key Derivation Function) zum sicheren abspeichern von Passwörtern.

Um den spezifischen Input für einen gegebenen Output einer Hash-Funktion herausfinden zu können, gibt es hauptsächlich zwei Wege:
  1. Einen "Angriff" auf den Algorithmus, mit dem Ziel über eine genaue Analyse der einzelnen und verbundenen Prozessschritte des Algorithmus "Abkürzungen" für bestimmte Berechnungen zu finden und darüber den Aufwand generell oder unter bestimmten Bedingungen zu verringern. (Z.B. für Kollisionsangriffe)
  2. Eine oder mehrere Rainbow-Tables. Das sind Datenbanken mit Sammlungen von zuvor berechneten Input-Output-Paaren, in denen für einen bekannten Output nach dem zugehörigen Input gesucht werden kann. Hierbei gibt es aber natürlich keine Garantie, fündig zu werden.
Für die allermeisten Einsatzzwecke innerhalb der Kryptographie spielt es bei Angriffen keine Rolle, ob man den tatsächlichen, ursprünglich genutzten Input zu einem Output findet, da der Inhalt des ursprünglichen Inputs nicht verarbeitet wird, sondern nur sein Hash-Wert.
Solange man also einen beliebigen Input in den Händen hält, der den benötigten Output generieren wird, hat man "gewonnen".

Ein frei verfügbarer Rainbow-Table für SHA256 fände sich z.B. hier: https://crackstation.net/
 
Zuletzt bearbeitet: (Rechtschreibung)
  • Gefällt mir
Reaktionen: Purche und CyborgBeta
Ich Danke euch für eure Beiträge, nun ist etwas Licht im Dunkeln. 😅

Also ist das Verfahren nur so sicher, wie der Benutzer, der das Passwort vergibt (oder die Benutzerin...), "schlau" ist.

Wenn ich weiß, dass Hänschen Klein nie mehr als 5 Zeichen als Passwort wählt, und ich überdies noch Annahmen über das Eingabealphabet treffen kann, dann ist das Verfahren nicht mehr sicher? Das liegt aber nicht am Verfahren selbst, sondern an dem unsachgemäßen Umgang damit, oder?

Obwohl... Wenn ich länger darüber nachdenke, betrifft das vermutlich viele/alle Verfahren.

Meine Frage ist eher, was gilt heute als sicher?
 
CyborgBeta schrieb:
Also ist das Verfahren nur so sicher, wie der Benutzer, der das Passwort vergibt (oder die Benutzerin...), "schlau" ist.
Genau daher kommen doch all die Tipps zu sicheren Passwörtern.
Und auch die Tipps, Passwörter nicht mehrfach zu verwenden.
 
AW4 schrieb:
Darüber hinaus ist ein Hash-Algorithmus so designt, dass
  • [ .... ]
  • er möglichst einfach und schnell berechnet werden kann und
"Gute" Hashfunktionen für "Passwordspeicherung" sollen genau das nicht sein.
 
  • Gefällt mir
Reaktionen: Ranayna und CyborgBeta
foofoobar schrieb:
"Gute" Hashfunktionen für "Passwordspeicherung" sollen genau das nicht sein.
AW4 schrieb:
Hash-Funktionen in der Kryptographie dienen meist der Integritätsprüfung von Inhalten oder über spezielle Passwort-Hash-Funktionen (Key Derivation Function) zum sicheren abspeichern von Passwörtern.
Bitte unbedingt aufmerksam lesen und verstehen!
Kryptographie ist nicht einfach!

Jede normale kryptographische und gute Hash-Funktion ist auf Geschwindigkeit ausgelegt, da sie integraler Bestandteil von so ziemlich allen kryptographischen Protokollen ist und dabei mindestens einmal alle relevanten Daten und Informationen verarbeiten muss.
Wäre sie dabei nicht schnell, würde das unheimlich viel Zeit und Geld kosten.

Dass sie dadurch nicht als Passwort-Hash taugt ist vollkommen richtig.
Deshalb sollte man es auch tunlichst vermeiden, eine normale kryptographische Hash-Funktion dafür zu verwenden.
Da hilft es auch nicht, sich nach langsamen, normalen kryptographischen Hash-Funktionen umzuschauen, da die meist nur deshalb langsamer sind, weil sie schlecht optimiert und schlecht designt sind.

Zum Speichern von Passwörtern bitte unbedingt so genannte Key Derivation Functions (KDF) inklusive Salt und wenn möglich auch Pepper nutzen!
Hier ein Überblick: https://github.com/OWASP/CheatSheet...e_Cheat_Sheet.md#password-storage-cheat-sheet
Und hier noch einer: https://crackstation.net/hashing-security.htm
 
  • Gefällt mir
Reaktionen: CyborgBeta
Vielleicht noch zwei Fragen.

Wie kann aus einem kurzen Eingabetext, sagen wir 4 Buchstaben, ein viel längerer Hash-Wert werden (ohne Seed)? Wo kommt die "Entropie" dafür her?

Und gibt es Eingabetexte, deren Hash-Wert 0x0 wäre?

Und noch zum Hintergrund: Ich hatte mich mal mit der (einfachen) XOR-Verschlüsselung zum Üben beschäftigt, auf der quasi alle modernen Verschlüsselungsverfahren beruhen (und auch PRNGs). Allerdings nie als Einweg-Funktion, also immer in beide Richtungen, sozusagen.

Es tut mir leid, wenn meine Fragen "dumm" klingen ... das ist keine Absicht.
 
CyborgBeta schrieb:
Vielleicht noch zwei Fragen.

Wie kann aus einem kurzen Eingabetext, sagen wir 4 Buchstaben, ein viel längerer Hash-Wert werden (ohne Seed)?
https://crypto.stackexchange.com/questions/3946/using-sha-256-with-different-initial-hash-value
Evtl. hilft auch ein Seitenblick auf CRC.
CyborgBeta schrieb:
Wo kommt die "Entropie" dafür her?
Bitte erläutern.
CyborgBeta schrieb:
Und gibt es Eingabetexte, deren Hash-Wert 0x0 wäre?
Bestimmt.
 
Ich finde, das sind gute Fragen. ;)
CyborgBeta schrieb:
Wie kann aus einem kurzen Eingabetext, sagen wir 4 Buchstaben, ein viel längerer Hash-Wert werden (ohne Seed)? Wo kommt die "Entropie" dafür her?
Alle mir geläufigen Hash-Algorithmen sind Block-basiert.
D.h., dein Input von 4 ASCII-Buchstaben sind bei einer Blocklänge von, sagen wir, 256 Bits in Wirklichkeit die 32 Bit der vier Buchstaben mit 224 "angehängten" Nullen.
Wie daraus dann etwas komplett Unkenntliches wird, ist von Hash-Algorithmus zu Hash-Algorithmus unterschiedlich.
Die SHA-2-Familie nutz ein paar "Magic Numbers" (etwas generell recht Verbreitetes in der Kryptographie) in Verbindung mit Expansion, Hin- und Hergeschiebe, natürlich XOR's und Kompression.
Wikipedia böte den entsprechenden Pseudocode, wobei es aber bestimmt noch bessere Quellen für die Beschreibung der internen Vorgänge im Internet gibt.

CyborgBeta schrieb:
Und gibt es Eingabetexte, deren Hash-Wert 0x0 wäre?
Bei Hash-Algorithmen gibt es dafür i.d.R. keine Sonderbehandlung.
D.h. der ist theoretisch existent. (Das finden ist entsprechend schwer.)
 
  • Gefällt mir
Reaktionen: CyborgBeta
Jeder Hash kann durch einfaches ausprobieren “rückübersetzt” werden. Moderne Hashalgorithmen wie Argon2 oder Scrypt sind aber auch mit sehr potenter Hardware nicht in einem brauchbaren Zeitrahmen zu knacken. SHA-256 wird jetzt niemand zum Hashen von Passwörtern einsetzen. Dazu ist der Algorithmus nicht gedacht, da viel zu schnell ausführbar auf dedizierter Hardware.
 
Zuletzt bearbeitet:
Zurück
Oben