Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Sicherheitslücke in MD5-Hash? (https://www.delphipraxis.net/182918-sicherheitsluecke-md5-hash.html)

humbuck 26. Nov 2014 13:55

Sicherheitslücke in MD5-Hash?
 
Hi,

Dieser Artikel betrifft die im Internet bereitgestellten Codes der DelphiMD5.pas und MD5.pas.

Vielleicht kann jemand meine folgende Erfahrung mit den o.a. Codes bestätigen:

Beim Testen der Codes fällt auf, dass bei einem String, zu dem ein Hash-Code erstellt wird, zwar die Veränderung der String-Länge für die Veränderung des Hashes sorgt, jedoch:

NUR die ersten 5 Zeichen des Strings sind signifikant!:shock:

Das bedeutet: Wenn ich die Zeichen nach den ersten fünf Zeichen verändere, erhalte ich, solange ich die Gesamtlänge des Strings nicht abändere, immer den selben Hash-Code.:?

Kann das jemand hier bestätigen?
Und wenn ja: Ist das so gewollt oder bekannt? (Könnte eigentlich ja nicht gewollt sein...)

Freue mich auf eine Antwort
Humbuck

ExceptionOverflow 26. Nov 2014 14:02

AW: Sicherheitslücke in MD5-Hash?
 
du willst also sagen oder hast bei dir beobachten können, dass dieser string: 'dasisteinstringmittext' und dieser string: 'dasisnocheinstringmitt' den selben MD5-Hash ergeben? Das kann nicht sein. Einer von uns beiden muss hier etwas falsch verstanden haben :shock:

EDIT: und auf welchen Artikel beziehst du dich?
- MD5 Hashes (sollte nicht aber) werden doch auch teilweise noch für Passwortvergleiche herangezogen zur Sicherheit, die wäre ja total verkommen, wenn deine Erfahrung so zutreffen würde

Neutral General 26. Nov 2014 14:03

AW: Sicherheitslücke in MD5-Hash?
 
Humbuck.

Daniel 26. Nov 2014 14:10

AW: Sicherheitslücke in MD5-Hash?
 
Wenn es bei Dir so ist, dann hast Du eine veraltete oder defekte Version dieser Datei.
Schau mal mit Google nach einer anderen Fassung. Es gibt sie definitiv, auch wenn ich gerade keinen Download-Link für Dich habe.

flipdascript 26. Nov 2014 14:22

AW: Sicherheitslücke in MD5-Hash?
 
Hashed Du evtl nur die Längenangabe des Strings?

himitsu 26. Nov 2014 14:24

AW: Sicherheitslücke in MD5-Hash?
 
Natürlich gibt es mehrere Strings, welche den selben Hash haben. Praktisch Unendlich durch Hashgröße.
Ein hast ist auch nur eine Art von Quersumme und 12+4 ist das Selbe wie 4+12, Aber es ist sher unwahrscheinlich soetwas zu treffen.

PS: siehe Rainbowtables ... man kann für einen MD5-Hash ein Wort finden, welches passt, aber es muß nicht der originale Text sein.


Zitat:

Hashed Du evtl nur die Längenangabe des Strings?
Oder den Pointer des Strings. :stupid:

humbuck 26. Nov 2014 14:37

AW: Sicherheitslücke in MD5-Hash?
 
Also erstmal danke für die schnellen Reaktionen...

Getestet habe ich die benannten Dateien mit XE4.

Das Resultat ist auf jeden Fall nicht immer eindeutig...

Beispiel:
dasisteinstringmittext = A5DCD7F958FBEFD92D0DDD784BE3E738

dasisteinstringmimmext = A5DCD7F958FBEFD92D0DDD784BE3E738

oder
Hallo Helga = 6C59769B57CCF847A83F5DD62E2CD0E9

Hallo Heimo = 6C59769B57CCF847A83F5DD62E2CD0E9

Hallo XXXXX = 6C59769B57CCF847A83F5DD62E2CD0E9

Interessant jedoch:

dasisteinstringmittext = A5DCD7F958FBEFD92D0DDD784BE3E738

dasisnocheinstringmitt = 535B5C75C062C8033F9584FE88FF42B2

Hat da jemand vielleicht eine Erklärung...?

Jedenfalls: Humbuck ist es nicht, was ich festgestellt habe.
Bitte einfach mal selbst testen...

Neutral General 26. Nov 2014 14:39

AW: Sicherheitslücke in MD5-Hash?
 
Ich habe es selbst getestet.

Lad doch mal deine MD5.pas hoch.

Bin (fast) von einem Troll ausgegangen aufgrund deines Namens und dass du dich dafür frisch angemeldet hast und der Tatsache dass ich es nicht reproduzieren kann und so ein schwerwiegender Fehler sicherlich schon länger aufgefallen wäre.

humbuck 26. Nov 2014 14:43

AW: Sicherheitslücke in MD5-Hash?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hier die Dateien:

humbuck 26. Nov 2014 14:45

AW: Sicherheitslücke in MD5-Hash?
 
Verwendet / getestet habe ich beide Dateien. Die MD5.pas habe ich modifizieren müssen, da permanent ein Integer-Überlauf eine Fehlermeldung erzeugte...

Neutral General 26. Nov 2014 14:53

AW: Sicherheitslücke in MD5-Hash?
 
Die MD5.pas von dir unterscheidet sich zwar stark von meiner MD5.pas aber beide erzeugen die gleichen unterschiedlichen Hashs für meine Teststrings:

Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
begin
  Edit1.Text := MD5_humbuck.MD5Print(MD5_humbuck.MD5String('12345_test123'));
  Edit2.Text := MD5_humbuck.MD5Print(MD5_humbuck.MD5String('12345_blabla5'));

  Edit3.Text := MD5.MD5DigestToStr(MD5.MD5String('12345_test123'));
  Edit4.Text := MD5.MD5DigestToStr(MD5.MD5String('12345_blabla5'));
end;

himitsu 26. Nov 2014 14:54

AW: Sicherheitslücke in MD5-Hash?
 
Zitat:

Zitat von Neutral General (Beitrag 1281188)
Lad doch mal deine MD5.pas hoch.

Und deinen Code, wie du es verwendest.

Klaus01 26. Nov 2014 14:55

AW: Sicherheitslücke in MD5-Hash?
 
In XE4 ist ein String ein UniCodeString.
Ein Char ein UniCodeChar - damit 2 Byte lang.

Das dürfte hier zu einem Problem führen (md5.pas):
Delphi-Quellcode:
// Create digest of given Message
function MD5String(M: string): MD5Digest;
var
   Context: MD5Context;
begin
   MD5Init(Context);
   MD5Update(Context, PChar(M), Length(M));
   MD5Final(Context, Result);
end;
das sollte dann wieder funktionieren.
Delphi-Quellcode:
// Create digest of given Message
function MD5String(M: string): MD5Digest;
var
   Context: MD5Context;
begin
   MD5Init(Context);
   MD5Update(Context, PChar(M), Length(M) * sizeOf(Char));
   MD5Final(Context, Result);
end;
Grüße
Klaus

himitsu 26. Nov 2014 14:56

AW: Sicherheitslücke in MD5-Hash?
 
Die Md5.pas ist definitiv nicht Unicoefähig.

gammatester 26. Nov 2014 14:57

AW: Sicherheitslücke in MD5-Hash?
 
Beide MD5 brauchen $Q-, bei der einen ist es schon eingebaut. Wahrscheinlich frönst Du der Unart, Strings zu hashen. Dieser Teil ist nicht Unicode-String kompatibel.
Delphi-Quellcode:
function MD5String(M: string): MD5Digest;
var
   Context: MD5Context;
begin
   MD5Init(Context);
   MD5Update(Context, PChar(M), Length(M));
   MD5Final(Context, Result);
end;

humbuck 26. Nov 2014 15:03

AW: Sicherheitslücke in MD5-Hash?
 
Das könntes es sein...

Tja, lieber Neutral General, mit den von dir verwendeten Strings erhalte ich ebenfalls unterschiedliche Hashes...

Hier mein Code zur Umsetzung:

type
TBenutzer = record
User : string[50];
Rechte : Packed Array[0..29] OF Boolean;
Aktiv : Boolean;
Passwort: string[50];
HashCode: String[32];
end;

Var
User: TBenutzer;

procedure TPasswordDlg.Button1Click(Sender: TObject);
Var Text :String;
I : Integer;
begin
Text := '';
for I := 0 to Memo2.Lines.Count do
begin
Text := Text + Memo2.Lines.Strings[I];
end;
Label4.Caption := Text;
Memo2.Lines.Clear;
Edit1.Text := MD5DigestToStr(MD5String(Text));
User.HashCode := MD5DigestToStr(MD5String(Text));
end;

Die Eingaben erfolgten jedoch immer nur in der ersten Zeile des Memofeldes... ohne Return...

humbuck 26. Nov 2014 15:15

AW: Sicherheitslücke in MD5-Hash?
 
Ich werde die Dateien wohl entsprechend anpassen müssen. (Komme ich heute wohl nicht mehr zu...)

Wenn ich zu einem Ergebnis gekommen bin, werde ich es hier posten.

Zunächst erstmal vielen Dank für alle Vorschläge.

Bis denne...
Humbuck

Uwe Raabe 26. Nov 2014 15:21

AW: Sicherheitslücke in MD5-Hash?
 
Zitat:

Zitat von Neutral General (Beitrag 1281188)
Bin (fast) von einem Troll ausgegangen aufgrund deines Namens

Vielleicht eher ein Gitarrist? Humbucker

humbuck 26. Nov 2014 16:41

AW: Sicherheitslücke in MD5-Hash?
 
So, ich habe die MD5 Datei (MD5.pas) modifiziert, wie von Klaus01 vorgeschlagen und... es funzt. Vielen Dank.

Ich hatte nicht berücksichtigt, dass in XE4 ein String ein UniCodeString ist.

Die Änderung in:

Delphi-Quellcode:
MD5Update(Context, PChar(M), Length(M) * sizeOf(Char));
erziehlt das gewünschte Ergebnis.

Vielen Dank.
(Natürlich an alle...)

P.S: Vielleicht noch an alle, die im guten Glauben sind, ihre MD5.pas arbeitet einwandfrei...
JETZT testen, falls ihr den selben Fehler beim Einsatz der MD5.pas (...auch die DelphiMD5.pas), wie ich gemacht habt, ungeprüft von einer alten Delphi Version auf eine neuere zu wechseln.

himitsu 26. Nov 2014 16:48

AW: Sicherheitslücke in MD5-Hash?
 
Es gibt von vielen md5.pas eben auch neuere Versionen, welche man beim Upgrade der Delphi-Version natürlich auch mit aktualisieren sollte. :stupid:

OlafSt 26. Nov 2014 23:02

AW: Sicherheitslücke in MD5-Hash?
 
Nur der Vollständigkeit halber möchte ich noch erwähnen, das es Humbug heißt, nicht Humbuck ;) Da waren schon einige wieder auf der falschen Fährte.

himitsu 26. Nov 2014 23:35

AW: Sicherheitslücke in MD5-Hash?
 
Das war bestimmt nur per Standart ein Bug.

DeddyH 27. Nov 2014 08:10

AW: Sicherheitslücke in MD5-Hash?
 
Was mich ein wenig verwundert: die DelphiMD5.pas scheint die meinerseits bearbeitete Version zu sein (siehe mein Thread von damals), aber in meiner Datei hier auf dem Rechner sieht die Funktion ganz anders aus:
Zitat:

Delphi-Quellcode:
function MD5String(const S: Ansistring): TMD5Digest;
begin
 Result:=MD5Buffer(PAnsiChar(S)^, Length(S));
end;

Anhand der Codeformatierung kann man davon ausgehen, dass diese Änderung nicht von mir vorgenommen wurde, das sähe anders aus. Ich kann mich nicht erinnern, diese Datei später noch einmal heruntergeladen und um die Compilerschalter ergänzt zu haben. Wo kommt also die gepostete Version her? :gruebel:

Neutral General 27. Nov 2014 08:35

AW: Sicherheitslücke in MD5-Hash?
 
Meine Version sieht auch aus wie deine.
Das meinte ich als ich gesagt hab dass meine MD5.pas ganz anders aussieht als seine :mrgreen:

himitsu 27. Nov 2014 08:41

AW: Sicherheitslücke in MD5-Hash?
 
Der TE hat sich grade erst an angemeldet, da wird er deine Version nicht heruntergeladen haben können. (nicht ohne Anmeldung)

Wird wohl noch wer anderes an der Datei rumgefummelt haben.
PS: Es verstecken sich geschätzt noch mindestens 10 weitere Varianten von MD5-Units, in der DP.

AlexII 27. Nov 2014 08:44

AW: Sicherheitslücke in MD5-Hash?
 
Darf ich die aktuelle und korrigierte Version von den MD5-Units haben? Danke!

DeddyH 27. Nov 2014 08:51

AW: Sicherheitslücke in MD5-Hash?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kein Problem, hier ist meine (heißt: die Version, die sich auf meinem Rechner befindet und nicht eine, die ich geschrieben hätte, ich hab lediglich die Compilerschalter eingefügt).

humbuck 27. Nov 2014 10:52

AW: Sicherheitslücke in MD5-Hash?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin, moin,

da das Thema ja noch nicht abgefischt zu sein scheint, möchte ich noch etwas ergänzen:
Die DelphiMD5.pas fand ich als Quellcode im Internet, dann Code kopiert und als .pas getestet.

Der Vollständigkeit halber möchte ich jetzt jedoch noch kurz die von mir auf anraten von Klaus01 modifizierte Datei MD5.pas mit den zusätzlich von mir eingefügten Compiler-Schaltern zum Download und prüfen / verwenden hochladen...



(Ist im Übrigen schon sehr spannend gewesen, wie schnell die Reaktionen mit einer entsprechenden Schlagzeile erfolgt sind... *grins*)

Neutral General 27. Nov 2014 10:53

AW: Sicherheitslücke in MD5-Hash?
 
Zitat:

Zitat von humbuck (Beitrag 1281285)
(Ist im Übrigen schon sehr spannend gewesen, wie schnell die Reaktionen mit einer entsprechenden Schlagzeile erfolgt sind... *grins*)

Die Delphipraxis ist allgemein ziemlich schnell ;)

Sherlock 27. Nov 2014 10:57

AW: Sicherheitslücke in MD5-Hash?
 
Zitat:

Zitat von Neutral General (Beitrag 1281286)
Zitat:

Zitat von humbuck (Beitrag 1281285)
(Ist im Übrigen schon sehr spannend gewesen, wie schnell die Reaktionen mit einer entsprechenden Schlagzeile erfolgt sind... *grins*)

Die Delphipraxis ist allgemein ziemlich schnell ;)

Und das auch bei vollkommen unreisserischen Titeln: http://www.delphipraxis.net/182921-fehler-meldung.html

Sherlock

humbuck 27. Nov 2014 11:00

AW: Sicherheitslücke in MD5-Hash?
 
Ja, bemerkenswert... :-)

lowmax_5 27. Nov 2014 11:02

AW: Sicherheitslücke in MD5-Hash?
 
Wäre es nicht sinnvoll alle bekannten MD5 Implementationen (incl. Closed Source) mit einem definierten Eingabestring zu testen, um zu prüfen, ob jedesmal der gleiche Hashwert ermittelt wird? So würden doch Implementationsfehler schnell erkannt werden. Oder mache ich hier einen Denkfehler?

Neutral General 27. Nov 2014 11:10

AW: Sicherheitslücke in MD5-Hash?
 
Zitat:

Zitat von lowmax_5 (Beitrag 1281290)
Wäre es nicht sinnvoll alle bekannten MD5 Implementationen (incl. Closed Source) mit einem definierten Eingabestring zu testen, um zu prüfen, ob jedesmal der gleiche Hashwert ermittelt wird? So würden doch Implementationsfehler schnell erkannt werden. Oder mache ich hier einen Denkfehler?

Ich denke mal jemand der MD5 implementiert wird die Ergebnisse seiner Implementation mit anderen vorhandenen vergleichen oder mit bekannten Hashwerten zu bestimmten Eingabedaten.

Der Algorithmus dieser Unit ist ja richtig und liefert korrekte Hashes.
Das einzige Problem war dass davon ausgegangen wurde dass ein Char immer 1 Byte groß ist.

humbuck 27. Nov 2014 11:11

AW: Sicherheitslücke in MD5-Hash?
 
Testen sollte man immer...



Ich habe mir gestern Abend auch so manchen Artikel hier durchgelesen...

Bei vielen Statements ist es nur schade , dass diese z.T. Hilfesuchende abschrecken, aus Furcht sich zum Deppen zu machen, wenn sie mit Antworten konfrontiert werden, die des Öfteren mal verhöhnend oder sogar beleidigend sind. :? Da könnte man eher mal die Schn... halten... :wink:

Daher möchte ich unbedingt für alle eine Lanze brechen, die ungeachtet der Fähigkeiten eines Hilfesuchenden, entsprechend schnelle und vor Allem qualifizierte Antworten geben.
Wie ich gesehen habe, teilweise sogar mit einem erheblichen Aufwand.

Hut ab... :thumb:

Luckie 27. Nov 2014 11:14

AW: Sicherheitslücke in MD5-Hash?
 
Zitat:

Zitat von Sherlock (Beitrag 1281288)
Und das auch bei vollkommen unreisserischen Titeln: http://www.delphipraxis.net/182921-fehler-meldung.html

Ich habe ihn mal etwas reißerischer formuliert. :stupid:

Neutral General 27. Nov 2014 11:22

AW: Sicherheitslücke in MD5-Hash?
 
Zitat:

Zitat von Luckie (Beitrag 1281296)
Zitat:

Zitat von Sherlock (Beitrag 1281288)
Und das auch bei vollkommen unreisserischen Titeln: http://www.delphipraxis.net/182921-fehler-meldung.html

Ich habe ihn mal etwas reißerischer formuliert. :stupid:

Warum nicht gleich "Delphi ist tot!"? :mrgreen: :duck:

mkinzler 27. Nov 2014 11:47

AW: Sicherheitslücke in MD5-Hash?
 
So werden Sie über Nacht zum Milliardär!

Vorraussetzung: Multimilliardär): Geben Sie alles Geld, bis auf eine Mrd, aus :mrgreen:

humbuck 27. Nov 2014 14:29

AW: Sicherheitslücke in MD5-Hash?
 
Ohne Worte...

humbuck 27. Nov 2014 14:30

AW: Sicherheitslücke in MD5-Hash?
 
Ohne Worte...

humbuck 27. Nov 2014 14:31

AW: Sicherheitslücke in MD5-Hash?
 
No comment...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz