Autor Beitrag
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Do 24.05.07 10:44 
Was ist der Grund, warum man aus einem MD5-Hash die ursprüngliche Nachricht nicht zurückrechnen kann?


Moderiert von user profile iconChristian S.: Topic aus Sonstiges (Delphi) verschoben am Do 24.05.2007 um 10:44

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Do 24.05.07 10:50 
Weil es nunmal ein Hash ist. Der Hash berechnet einen Wert, der einen String eindeutig bestimmen soll. Hierzu schmeißt er aber Infos, die in dem String drin stehen weg, um zu einer festen Hash-Länge zu kommen. Und diese können nicht wieder hergezaubert werden. Ich weiß jetzt nicht genau, wie im speziellen MD5 funktioniert, Wikipedia sollte aber helfen.
Überleg mal was das für eine Komprimierung wäre, wenn ich beliebig größe Strings/Dateien immer in einen sehr kleinen Hash packen könnte und danach wieder zurückrechnen könnte... Das wär ja phänomenal :D Dann bräuchte kein Mensch mehr eine 16 MBit Internetleitung, weil ja sowieso alles mit den (kleinen) Hashs versendet wird, die dein Rechner dann wieder zurückrechnet....



MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 24.05.07 11:01 
Hashing ist mathematisch eine eindeutige aner nicht eineindeutige Abbildungsfunktion. D.H beim hashen des selben Code entsteht immer der selbe Hash. Aber es gibt unendlich viele Strings welche den delben Hash erzeugen.

_________________
Markus Kinzler.
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: Do 24.05.07 11:37 
Wenn Dir das nicht reicht, dann schau mal hier:
de.wikipedia.org/wiki/Hash
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Do 24.05.07 18:06 
Zur Verdeutlichung:
Wenn ich mir eine Zahl denke, und dir dann sage sie ist durch 3 teilbar, jedoch nicht durch 2 (hier der Hash), dann kannst du auch nicht "zurückrechnen", welche Zahl ich mir gedacht habe, da es unendlich viele Zahlen gibt, mit der Eigenschaft "durch 3 teilbar, durch 2 nicht teilbar".
Wenn ich jedoch den möglichen Bereich eingrenze, sagen wir ich habe mir eine Zahl von 1 bis 10 gedacht, dann wäre hier der Hash eindeutig, da es nur eine einzige Möglichkeit gibt, nämlich die Zahl 9.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 24.05.07 18:16 
user profile iconChryzler hat folgendes geschrieben:
Zur Verdeutlichung:
Wenn ich mir eine Zahl denke, und dir dann sage sie ist durch 3 teilbar, jedoch nicht durch 2 (hier der Hash), dann kannst du auch nicht "zurückrechnen", welche Zahl ich mir gedacht habe, da es unendlich viele Zahlen gibt, mit der Eigenschaft "durch 3 teilbar, durch 2 nicht teilbar".
Wenn ich jedoch den möglichen Bereich eingrenze, sagen wir ich habe mir eine Zahl von 1 bis 10 gedacht, dann wäre hier der Hash eindeutig, da es nur eine einzige Möglichkeit gibt, nämlich die Zahl 9.


Womit übrigens eindrucksvoll bewiesen ist, dass man so keine Kompression machen kann.
Um die Information '3' zü übertragen, brauchen der Hash schon 2 Byte. Die Information, die dann das Zurückrechnen ermöglicht, nämlich '1 bis 10', benötigt nochmal 2 Byte, womit der Speicherbedarf größer ist.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: Do 24.05.07 21:04 
user profile iconMartok hat folgendes geschrieben:
Womit übrigens eindrucksvoll bewiesen ist, dass man so keine Kompression machen kann.
Kann man eindrucksvoller beweisen:
Trinke ein Bier, warte ein bisschen und pinkel vor versammelter Meute in das leere Bierglas.
Wer jetzt aus dem Inhalt des Glases wieder das Bier 'zurückrechnen' kann, kann wahrscheinlich sogar einen MD5 Hash zurückzaubern. :mrgreen:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 24.05.07 21:06 
user profile iconRobert_G hat folgendes geschrieben:
Wer jetzt aus dem Inhalt des Glases wieder das Bier 'zurückrechnen' kann, kann wahrscheinlich sogar einen MD5 Hash zurückzaubern. :mrgreen:
Kölsch-Brauer können einen MD5 Hash zurückzaubern? :shock:

Ach, nein, denen gelingt das Zurückrechnen des Bieres ja auch nicht ...

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Coder
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Do 24.05.07 21:28 
user profile iconmkinzler hat folgendes geschrieben:
Aber es gibt unendlich viele Strings welche den delben Hash erzeugen.

Wieso speichert man dann Passwörter als Hash?
Ist das nicht unsicherer als würde man das Passwort selbst speichern?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 24.05.07 21:35 
user profile iconCoder hat folgendes geschrieben:
Wieso speichert man dann Passwörter als Hash?
Damit, falls jemand unbefugt Zugang zur Datenbank erhält, derjenige die Passwörter nicht kennt. Oder auch befugt (wie z.B. ich beim DF): Es gibt sicherlich viele Nutzer, die dasselbe Passwort fürs DF und andere Seiten benutzen. Die würde ich dann alle kennen. Da nur der Hash gespeichert wird, nicht.

Und was die Sicherheit angeht: Es gibt zwar Millionen Strings, die den gleichen Hash erzeugen. Aber noch viel mehr, die das nicht tun ;-) Eine solche "Kollision" zu finden, ist ein sehr großer Aufwand.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Do 24.05.07 21:43 
Hier mal etwas genauere Zahlen zum Erkennen der Größenordnung:

Bei MD5 (128-Bit-Hash) gibt es 2^128 verschiedene Hash-Ergebnisse. Das sind etwa
340282366921000000000000000000000000000 verschiedene Hash-Werte.
Damit sollte es relativ schwierig werden, zu einem Hash-Wert den ursprünglichen String (oder einen mit dem gleichen Hash) zu finden.

Allerdings muss man der Wahrheit zuliebe sagen, dass genau dies einigen chinesischen Wissenschaftlern gelungen ist (siehe z. B. Wikipedia-Artikel).

ub60
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 24.05.07 23:16 
user profile iconCoder hat folgendes geschrieben:
user profile iconmkinzler hat folgendes geschrieben:
Aber es gibt unendlich viele Strings welche den delben Hash erzeugen.

Wieso speichert man dann Passwörter als Hash?
Ist das nicht unsicherer als würde man das Passwort selbst speichern?

Nein.

Wenn Du das Passwort speicherst, dann kann man es wieder auslesen. Bei einem guten Hash ist es so, das Du sehr viele Passwörter durchprobieren musst, um einen identischen Hashwert zu erhalten. Ganz sicher ist so etwas natürlich nicht, aber was ist schon sicher?

_________________
Na denn, dann. Bis dann, denn.
g1o2k4
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Fr 25.05.07 07:29 
stell dirs vor wie ne quersumme:

348 hat die quersumme 15
aber die zahl 726 hat auch die quersumme 15

man kommt von der zahl aber die quersumme aber nicht zurück.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 25.05.07 07:53 
Hi

... und genau da ist ja auch die Schwachstelle der Hash-Speicherung: Es reicht aus, irgend eine Orignalnachricht zu ermitteln, die auf den gleichen Hash abgebildet wird.

Wenn Du nun die Quersumme als Hashfunktion nimmst, dann kann man zwar genausowenig das Original rückberechnen, aber da man einen beliebigen anderen Wert mit der gleichen Quersumme berechnen kann, kann man diese Sicherheitshürde trotzdem überwinden.

Ziel ist es also, eine Hashfunktion zu entwickeln, für die es keine Umkehrfunktion gibt (Trapdoor-Funktion). Dann muss man nämlich probieren, und das dauert.

_________________
Na denn, dann. Bis dann, denn.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 25.05.07 17:59 
Kleine Anmerkung vorweg: Für MD5 gibt es inzwischen eine Möglichkeit für einen bekannten Klartext einen weiteren anzugeben, der genau den gleichen Hashwert erzeugt. Problem an MD5 ist seine Symmetrie ... Siehe hier

Witzig ist es aber, wenn man mehrere Hash-Werte concateniert und diese mit einem weiteren (sicheren) Verfahren hasht ... So steigert man zwar nicht unbedingt die Sicherheit, aber ein SHA256-Hasch mit CRC32-Suffix, der wie MD5 aussieht, bringt fast jeden zur Verzweiflung ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Sa 26.05.07 13:55 
user profile iconalzaimar hat folgendes geschrieben:
Ziel ist es also, eine Hashfunktion zu entwickeln, für die es keine Umkehrfunktion gibt (Trapdoor-Funktion). Dann muss man nämlich probieren, und das dauert.
Eine Trapdoor-Funktion ist eine Umkerfunktion, die das Umkehren einer eigentlichen Einweg-Funktion nur durch eine Zusatzinformation möglich macht. Es stimmt aber, dass eine Hash-Funktion gefunden werden muss, zu der es keine Umkehrfunktion gibt, alles andere macht Kryptografisch keinen Sinn!

Das Zurückrechnen von MD5 ist nicht möglich, weil eine Modulo-Funktion verwendet wird. Von allen 512Bit-Blöcken des Strings werden vier 32Bit-Blöcke erzeugt die zu den vier 32Bit-Ausgabeblöcken addiert werden. Da 32Bit-Blöcke in der länge begrenzt sind, wird die Modulofunktion zum "kürzen" verwendet.