MD5 und SHA (allgemeine Informationen)

Dario Linsky

Erfahrenes Mitglied
Hi,

da in letzter Zeit anscheinend immer wieder die Frage aufkommt, ob bzw. wie man MD5 und SHA1 richtig anwendet oder "entschlüsselt", mal ein paar generelle Dinge dazu.

1. Weder MD5 noch SHA1 sind Verschlüsselungen, sondern Hashes bzw. Prüfsummen (wie auch CRC). Ein solcher Hash kann aus einer beliebig langen Zeichenkette erstellt werden und bildet diese Informationen in kurzer Form ab.
Üblicherweise wird man solche Hashes häufig bei Downloads finden, gerade wenn es sich um größere Dateien handelt, beispielsweise CD-Images von http://www.linuxiso.org: der Download eines CD-Images kann etwas länger dauern und wenn man beim Brennvorgang erst merkt, dass die Imagedatei nicht komplett oder fehlerhaft runtergeladen wurde, kann das sehr ärgerlich sein. Um zu überprüfen, ob die Datei vollständig und in Ordnung ist, kann man aus der Datei eine Prüfsumme errechnen lassen, die trotz der möglicherweise 600MB auf ein Minimum von 32 Bytes (bei MD5) reduziert werden kann.

2. MD5 und SHA1 können für die Verschlüsselung von Kennwörtern zweckentfremdet werden, was eigentlich auch schon allgemein übliche Praxis ist. Zur Überprüfung der Kennwörter in Logins oder ähnlichem muss man jeweils von den vom Benutzer eingegebenen Kennwörtern zuerst einen Hash erstellen und diesen dann mit einem bei der Registrierung erstmals erstellen Hash aus einer beliebigen Datenquelle überprüfen.

3. Hashes funktionieren nur in eine Richtung.
Es gibt (mit Ausnahme von Bruteforce) keine Möglichkeit, aus einem Hash die Ursprungsdaten eindeutig wieder zurückzubekommen. Das ist logischerweise der Vorteil davon.
Der einzige Weg, einen Hash zu "knacken", wäre Bruteforce, wobei das eigentlich nicht empfehlenswert ist, da es sehr wahrscheinlich sehr lange dauern würde und den Aufwand nicht rechtfertigt.

4. Noch zu beachten ist, dass (zumindest MD5) keine eindeutigen Hashes erzeugt. Da man, wie im ersten Punkt schon gesagt, eine beliebig lange Datenmenge auf immer genau 32 Bytes abbilden kann, ist es natürlich logisch, dass es für zwei völlig verschiedene Ausgangsdaten einen identischen Hash geben kann. Auch wenn das unwahrscheinlich ist, könnte man solche Probleme bekommen.

Ich hoffe, damit sind die gröbsten Fragen ein für alle Mal beantwortet. :)

Grüße, Dario
 
Soll ich hier die Fragen dazu stellen?

Naja ich bin mir nicht sicher ob ich hier ,in diesem Thread , die Fragen stellen soll ,aber ich probiers mal.
Also sagen wir mal ich habe eine Datenbank wo der Benutzer sein Passwort als md5 hash gespeichert hat.
Ich will nun die Daten abgleichen , muss ich dann , wenn die variable aus dem Formular wo der User sein Passwort eingeben kann $var ist , md5($var) machen und dann zu vergleichen?
Ist das nicht aber unsicher ,da md5 , ja gleiche Prüfsummen erstellen kann?
 
Genau das hatte ich eigentlich mit dem zweiten Punkt erklären wollen. ;)

Ja, es ist eigentlich so, dass man bei einem Login das vom Benutzer eingegebene Kennwort erst mit einer der Hash-Funktionen umwandelt und diesen Hash dann mit einem gespeicherten Kennwort-Hash vergleicht.

Das ist schon sicher. Die Wahrscheinlichkeit, dass dabei zufällig mal ein identischer Hash aus zwei verschiedenen Kennwörtern erzeugt wird, ist sehr klein - wenn auch vorhanden.
 
Grundsätzlich sollte man heutzutage auf MD5 ganz verzichten, da einige Mathematiker gezeigt haben, dass MD5 nicht sicher ist. SHA ist besser.

Gawayn
 
Original geschrieben von Gawayn
Grundsätzlich sollte man heutzutage auf MD5 ganz verzichten, da einige Mathematiker gezeigt haben, dass MD5 nicht sicher ist. SHA ist besser.

Gawayn

Wenns ein Hacker schafft an den md5-Hash zu kommen (DB auslesen), dann isset Wurscht ob der Hash nun von md5 oder SHA ist, denn der Hacker is ja schon drin. ^^
 
Wie ich in meinem vorherigen Post schrieb, handelt es sich um eine mathematische Lösung. Es geht dabei also nicht ums Hacken. Wer sich mit dem Algorithmus gut auskennt, kann unter Umständen eine Hashkollision finden. Fragt mich aber nicht nach Details -- ich bin nicht derjenige, der sich damit beschäftigt hat ...

Gawayn
 
Ich bin ein Unwissender und habe mich gefragt, wenn ein Wert mit md5 "verschlüsselt" (mir ist schon klar, dass verschlüsseln da das falsche wort ist...)wird, folgt dies doch einem bestimmten Algorithmus. Warum kann man einen solchen Algorithmus nicht einfach umkehren?
 
Zuletzt bearbeitet:
Nun, nur weil etwas ein Algorithmus ist, heißt das nicht, dass es auch umkehrbar ist. Ich will dir ein Beispiel geben.

Angenommen, wir haben eine Menge A von Zahlen:

1, 2, 3, 4, 5, 6, 7, 8, 9

Diese Zahlen bilde ich nun nach irgendeinem Algorithmus auf die Menge B folgender Zahlen ab:

1, 2, 3, 4

Nun siehst du, dass es unumgänglich ist, dass manche Zahlen aus B "doppelt belegt" sind mit mehreren Zahlen aus A. Wenn z.B. die Zahl 2 aus B mit den A-Werten 2, 3 und 4 "belegt" wird, kannst du die Operation nicht mehr eindeutig rückgängig machen, das heißt: Wenn dir jemand eine 2 gibt und dich auffordert, den Algorithmus umzukehren, weißt du einfach nicht, ob die ursprüngliche Zahl in A nun eine 2, eine 3 oder eine 4 war.

Bei MD5 ist es praktisch so, dass eine unendliche Zahl von Bits auf eine endliche Zahl von Bits abgebildet wird. Wie willst du aus 128 Bits die ursprünglichen X Bits regenerieren? Es gibt ja schließlich unendlich viele Bitkombinationen, die bei einer Kodierung mit MD5 die gegebene 128-Bitkombination erzeugen können!

Manche Algorithmen kannst du auch aus anderen Gründen nicht umkehren. Beim Verschlüsselungsalgorithmus RSA, der sehr einfach ist, werden zwei große Primzahlen miteinander multipliziert. Nun würdest du wohl sagen, dass das ja sehr einfach wieder umzukehren sei. Ist es aber nicht! Es ist extrem schwierig, eine riesige Zahl zu faktorisieren, erst recht, wenn ihre Faktoren riesige Primzahlen sind.

Ein anderer Verschlüsselungsalgorithmus stützt sich auf die Schwierigkeit, diskrete Logarithmen berechnen zu können. Das heißt, wenn ich eine Gleichung habe:

a = x^y mod z

dann kann ich a sehr einfach berechnen, wenn ich x, y und z habe. Was ist aber, wenn ich nur a, x und z habe und nun y berechnen will? Tja. Nix von wegen umkehren.

Gawayn
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück