Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Password Verschlüsselung mit TIdCoderMD5 klappt nicht!
JRegier - Di 12.07.05 07:42
Titel: Password Verschlüsselung mit TIdCoderMD5 klappt nicht!
Hallo, kann mir einer sagen welchen Algorithmus könnte ich anwenden um ein Passwort zu verschlüsseln?
Ich hatte mir früher gedacht einfach werden von jedem Character etwas Increment/Decrement gemacht!
Na ja man kann ja auch die Position hinzuaddieren oder mit jedem n-ten anders verfahren!
JRegier - Di 12.07.05 10:11
Vielen Dank, für Info! Kann man eigentlich die Hashes umdefinieren? So das es eine andere Verschlüsselung wird das nicht ein Standard wäre
und keiner Knacken kann?
jasocul - Di 12.07.05 10:13
JRegier hat folgendes geschrieben: |
wird das nicht ein Standard wäre |
bestimmt.
JRegier hat folgendes geschrieben: |
und keiner Knacken kann? |
bestimmt nicht.
Motzi - Di 12.07.05 10:37
Hashes sind schonmal der richtige Ansatz, aber ich würde kein MD5 nehmen, sondern eher SHA1 (wobei das angeblich auch nicht mehr so sicher ist) bzw. mein momentaner Favorit RipeMD.
Einen bestehenden Hash-Algorithmus zu ändern halte ich für sehr gewagt! Diese Algos sind schon lange im Einsatz, von x Spezialisten eingehend untersucht und haben sich (manche mehr, manche weniger) gut bewährt. Wenn nun jetzt jemand hergeht und irgendwas ändert, und nicht genau weiß was er da macht, dann würd ich dem Algorithmus ganz sicher kein Vertrauen mehr schenken!! Also lieber auf den gut bewährten Standard-Hash-Algo zurückgreifen!
Gruß, Motzi
JRegier - Di 12.07.05 10:48
Na Tol! Ich habe jetzt mit dem TIdCoderMD5 Probiert aber irgendwas läuft schief! Genauer gesagt ich kann mich jetzt mit beliebigem Passwort einlogen!
Hier der Code!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| procedure TMainForm.SetPassword; var Pass : TStringList; PassCoder : TIdCoderMD5; begin ApplicationDirectory := ExtractFileDir(Application.ExeName); Pass := TStringList.Create; PassFile := ApplicationDirectory+'\DSCHAMBUL.CAT'; PassCoder := TIdCoderMD5.Create(Self); if(FileExists(PassFile))then begin Pass.LoadFromFile(PassFile); Password := PassCoder.CodeString(Pass.Strings[0]); end else begin Pass.Add(PassCoder.CodeString('masterkey')); Pass.SaveToFile(PassFile); Password := Pass.Strings[0]; end; Pass.Free; PassCoder.Free; end;
procedure TLoginForm.OKBtnClick(Sender: TObject); var PassCoder : TIdCoderMD5; begin PassCoder := TIdCoderMD5.Create(Self); if(PassCoder.CodeString(Trim(PasswordEdit.Text)) = Password)then begin PasswordEdit.Text := ''; Login := True; Close; end else ShowMessage('Falsches Admin Passwort! Kein Zutritt!'); PassCoder.Free; end;
procedure TPassChangeForm.OKBtnClick(Sender: TObject); var New, Rep : String; PassCoder : TIdCoderMD5; begin PassCoder := TIdCoderMD5.Create(Self); if(PassCoder.CodeString(Trim(OldPasswordEdit.Text)) <> Password)then ShowMessage('Admincreator Passwort stimmt nicht! Passwort kann nicht geändert werden!') else begin New := Trim(NewPasswordEdit.Text); Rep := Trim(NewPasswordRepeatEdit.Text); if(New <> Rep)then ShowMessage('Passwortwiederh. stimmt mit neum Passwort nicht überein!') else begin Login := True; Password := PassCoder.CodeString(Trim(NewPasswordEdit.Text)); Close; end; end; PassCoder.Free; end; |
Ich habe in das Passwort File gesehen aber das ist leer!
zemy - Di 12.07.05 11:08
Mal so als Denkansatz: Würde es helfen, wenn man beim Password automatisch nach der Eingabe noch ein Leerzeichen oder ähnliches hinzufügt? Im Idealfall würden sich 50% der Bits ändern und man könnte nicht mehr so einfach den Hash ersetzen in der PW-File...
JRegier - Di 12.07.05 12:04
zemy hat folgendes geschrieben: |
Mal so als Denkansatz: Würde es helfen, wenn man beim Password automatisch nach der Eingabe noch ein Leerzeichen oder ähnliches hinzufügt? Im Idealfall würden sich 50% der Bits ändern und man könnte nicht mehr so einfach den Hash ersetzen in der PW-File... |
Soll das etwa die Erklärung dafür sein warum mein Code nicht funktioniert?
patrick - Di 12.07.05 12:12
das verhindert schonmal. das jemand mit einem beliebigen md5 generator dein passwort ersetzt.
aber was ist, wenn jemand der auch das programm hat, einfach seinen schlüssel durch den originalen ersetzt?
damit würde dieser jemand durchkommen und es würde funktionieren.
am besten beziehst du noch rechnerspezifische daten wie die seriennummer von windows, die seriennummer der festplatte oder ähnliches mit ein.
dann wird es für den angreifer immer schwieriger das passwort einfach so zu übersetzen.
zemy - Di 12.07.05 12:16
JRegier hat folgendes geschrieben: |
zemy hat folgendes geschrieben: | Mal so als Denkansatz: Würde es helfen, wenn man beim Password automatisch nach der Eingabe noch ein Leerzeichen oder ähnliches hinzufügt? Im Idealfall würden sich 50% der Bits ändern und man könnte nicht mehr so einfach den Hash ersetzen in der PW-File... |
Soll das etwa die Erklärung dafür sein warum mein Code nicht funktioniert? |
Nein, das sollte nur ne Frage am Rande sein, ob dies sinnvoll währe und die Sicherheit erhhen würde. So geberiert man nur nen MD5-String von nem Eigenen Password und ersetzt das mit dem vorgegebenen
Zu deinem Code: SetPassword rufts du auch auf, oder? Wenn ja dann keine Ahnung :?
Motzi - Di 12.07.05 13:12
Also MD5 würde ich nicht verwenden..! Mein Favorit ist wie gesagt RipeMD.. im
DEC von Hagen Reddmann findet man eine Implementierung davon..
Zitat: |
am besten beziehst du noch rechnerspezifische daten wie die seriennummer von windows, die seriennummer der festplatte oder ähnliches mit ein. |
Gute Idee, und wenn man dann mal das OS oder die Festplatte wechselt stimmen alle Passwörter nicht mehr... :roll:
patrick - Mi 13.07.05 09:29
Motzi hat folgendes geschrieben: |
A Zitat: | am besten beziehst du noch rechnerspezifische daten wie die seriennummer von windows, die seriennummer der festplatte oder ähnliches mit ein. |
Gute Idee, und wenn man dann mal das OS oder die Festplatte wechselt stimmen alle Passwörter nicht mehr... :roll: |
wenn die betroffene festplatte bzw das betriebssystem geändert wird, muss die software i.d.R. sowieso neu aufgespielt werden.
und es geht ja nur um ein lokalen login für das programm
das man sich dadurch einschränkunen einkauft bestreite ich ja gar nicht :wink:
JRegier - Mi 13.07.05 12:14
JRegier hat folgendes geschrieben: |
Na Tol! Ich habe jetzt mit dem TIdCoderMD5 Probiert aber irgendwas läuft schief! Genauer gesagt ich kann mich jetzt mit beliebigem Passwort einlogen!
Hier der Code!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| procedure TMainForm.SetPassword; var Pass : TStringList; PassCoder : TIdCoderMD5; begin ApplicationDirectory := ExtractFileDir(Application.ExeName); Pass := TStringList.Create; PassFile := ApplicationDirectory+'\DSCHAMBUL.CAT'; PassCoder := TIdCoderMD5.Create(Self); if(FileExists(PassFile))then begin Pass.LoadFromFile(PassFile); Password := PassCoder.CodeString(Pass.Strings[0]); end else begin Pass.Add(PassCoder.CodeString('masterkey')); Pass.SaveToFile(PassFile); Password := Pass.Strings[0]; end; Pass.Free; PassCoder.Free; end;
procedure TLoginForm.OKBtnClick(Sender: TObject); var PassCoder : TIdCoderMD5; begin PassCoder := TIdCoderMD5.Create(Self); if(PassCoder.CodeString(Trim(PasswordEdit.Text)) = Password)then begin PasswordEdit.Text := ''; Login := True; Close; end else ShowMessage('Falsches Admin Passwort! Kein Zutritt!'); PassCoder.Free; end;
procedure TPassChangeForm.OKBtnClick(Sender: TObject); var New, Rep : String; PassCoder : TIdCoderMD5; begin PassCoder := TIdCoderMD5.Create(Self); if(PassCoder.CodeString(Trim(OldPasswordEdit.Text)) <> Password)then ShowMessage('Admincreator Passwort stimmt nicht! Passwort kann nicht geändert werden!') else begin New := Trim(NewPasswordEdit.Text); Rep := Trim(NewPasswordRepeatEdit.Text); if(New <> Rep)then ShowMessage('Passwortwiederh. stimmt mit neum Passwort nicht überein!') else begin Login := True; Password := PassCoder.CodeString(Trim(NewPasswordEdit.Text)); Close; end; end; PassCoder.Free; end; |
Ich habe in das Passwort File gesehen aber das ist leer! |
Jetzt sagt mir doch mal warum dieser Code hier nicht funzt! Also ich kann mich im Prinzip mit beliebigem Passwort einlogen!
maxk - Mi 13.07.05 12:20
Wie gesagt, wenn du SetPassword aufgerufen hast, so müsste der Code eigentlich funktionieren. Definier doch einen Haltepunkt und geh einfach mal Schrittweise durch. Dann siehst du wo der Fehler ist ;)
JRegier - Mi 13.07.05 13:20
maxk hat folgendes geschrieben: |
Wie gesagt, wenn du SetPassword aufgerufen hast, so müsste der Code eigentlich funktionieren. Definier doch einen Haltepunkt und geh einfach mal Schrittweise durch. Dann siehst du wo der Fehler ist ;) |
Du meinst meine procedure SetPassword oder..? Jetzt habe ich da in der Hilfe gesehen das man noch den Zurückgegebenen Wert mit Fetch
ummogeln muß aber das klappt wohl auch nicht! Also was ich von der CodeString Funktion zurückbekomme ist ein Leerer String;
JRegier - Do 14.07.05 08:32
Hey Leute ich habe meine eigene Verschlüsselungsroutine erfunden! Kann den einer knacken wenn er nicht zum Standard gehört?
Aber übrigens macht der MD5 auch wahrscheinlich aus benutzerdefinierten Initialisierung den Passenden Schlüssel oder?
Es ist nur so eine Idee! Aber könnte vieleicht wircklich der Fall sein! Ich bekamm nämlich immer einen leeren String als
Passwort zurück wahrscheinlich muß der TIdCoderMD5 erstmall benutzerdefiniert mit Werten Initialisiert werden, hab ich recht?
jasocul - Do 14.07.05 08:39
JRegier hat folgendes geschrieben: |
Hey Leute ich habe meine eigene Verschlüsselungsroutine erfunden! Kann den einer knacken wenn er nicht zum Standard gehört? |
Ja. Sagte ich bereits.
JRegier - Do 14.07.05 09:57
jasocul hat folgendes geschrieben: |
JRegier hat folgendes geschrieben: | Hey Leute ich habe meine eigene Verschlüsselungsroutine erfunden! Kann den einer knacken wenn er nicht zum Standard gehört? |
Ja. Sagte ich bereits. |
Aber welche Methoden benutzen Knacker, können die in den Code sehen und das zurückrechnen?
jasocul - Do 14.07.05 10:01
Alles ein Frage des Aufwands.
Wie ds im einzelnen machen kann ich dir nicht sagen. Ich gehe aber mal davon aus, dass hervorragende Kenntnisse in ASM sehr hilfreich sein werden.
Und gibts ja auch noch Brute-Force :lol:
maxk - Do 14.07.05 11:20
JRegier hat folgendes geschrieben: |
Aber welche Methoden benutzen Knacker, können die in den Code sehen und das zurückrechnen? |
Das ist gar nicht nötig, da man den Code eines Verschlüsslungsalgorithmus sowieso immer veröffentlichen sollte. Ansonsten ist
jeder Algorithmus knackbar. Nur weil niemand aus dem Forum es schaffen könnte, heißt es nicht, dass es nicht möglich ist. Mathematisch ist es das nämlich immer. Und zur Not kommt (wie jasocul bereits sagte) Bruteforce 8)
JRegier - Do 14.07.05 12:47
maxk hat folgendes geschrieben: |
Das ist gar nicht nötig, da man den Code eines Verschlüsslungsalgorithmus sowieso immer veröffentlichen sollte. |
Hä, wieso? Nur weil ich für mein eigen Entwickeltes Programm mit einer Formel die mir gerade in den Sinn gekommen war Passwörter verschlüssele heißt das doch lange nicht dass es veröffentlicht werden müßte, oder?
Motzi - Do 14.07.05 14:34
Nein, aber Algorithmen, deren einzige Sicherheit darauf beruht, dass niemand weiß wie er funktioniert kann man nicht als sicher einstufen!! Notfalls schickt man dein Prog mal durch den Disassembler und sucht sich im ASM-Code den Algo - für einen geübten Cracker kein Problem. Und da ich nicht annehme, dass du so tolle Kenntnisse über Kryptographie hast (sonst gäbe es diesen Thread wohl nicht), glaube ich kaum, dass dein Algo ein geeigneter Hash/Verschlüsselungs-Algorithmus ist.
Ich hab es bereits 2x gesagt, wurde aber bis jetzt anscheinend ignoriert. Ich wiederhole es also noch ein drittes (aber letztes Mal) - ich empfehle den RipeMD-Hash-Algo. Es gibt mehrere Versionen, die verschieden lange Hashes erzeugen (bis 320bit), die Sicherheit ist aber bei allen Versionen gleich hoch. Eine Implementierung findet man im
DEC von Hagen Reddmann.
Und generall zum Thema Hash-Algorithmen kann man sich auch meine Ausarbeitung ansehen, die ich letztes Semester für die Uni gemacht hab - zu finden ist sie auf meiner Homepage bei den Tutorials:
http://www.manuel-poeter.de
Gruß, Motzi
JRegier - Do 14.07.05 15:09
Motzi hat folgendes geschrieben: |
Nein, aber Algorithmen, deren einzige Sicherheit darauf beruht, dass niemand weiß wie er funktioniert kann man nicht als sicher einstufen!! |
Ja also Abstürzen tut er nicht! :lol: Bei einem System mit Fingerabdruck müßten die nur die dazugehörigen Daten auslesen ne?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!