Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen (https://www.delphipraxis.net/158595-passwort-verschluesselt-datanbank-schrieben-und-mit-c-auslesen.html)

dust258 23. Feb 2011 13:24

Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Hallo Leute,

wie die Überschrift schon sagt möchte ich ein Passwort verschlüsselt in meiner Datenbank speichert, um es später wieder auslesen.
Das Speichern geschieht innerhalb einer Delphi-Applikation. Das Auslesen des Passworts geschieht in einer C#-Anwendung.

Fällt euch ein Verfahren ein mit dem ich das bewerkstelligen könnte, welches sowohl unter Delphi als auch unter C# umsetzbar ist?

Mir würde da spontan RSA einfallen (WOW, doch was in der Berufsschule gelernt), aber das scheint mir für ein einfaches Passwort leicht übertrieben.
Was meint Ihr?

Bernhard Geyer 23. Feb 2011 13:32

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Generell gehen alle Verfahren. Der Fallstrick ist jedoch nur das bei Delphi (bis D2009) man mit String einen 1-Byte String hat und bei .NET String ein UTF-16-Codierter String vorliegt.

Brauchst du wirklich das Passwort in .NET oder reicht der Hash? Bedenke auch das dein .NET-Programm obfuscated damit ein Angreifer es nicht zu einfach hat.

jfheins 23. Feb 2011 13:33

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
MD5 oder besser SHA1 wären Kandidaten. Du könntest natürlich auch RO13, oder base64 anwenden, wobei das keine Verschlüsselungsalgos sind. (Sie täuschen sogar Sicherheit vor, wo keine ist.)
SHA1 sollte relativ sicher sein und wurde bestimmt schon in beiden Sprachen implementiert.

dust258 23. Feb 2011 13:38

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Danke für die Antwort. Ja, über das Problem mit den Unicode-Strings bin ich auch gestoßen.

Und ja, ich benötige wirklich das Passwort. Es handelt sich dabei um Kontodaten die vom Delphi-Programm aus eingegeben und vom C# Programm zur Kommunikation verwendet werden.

Namenloser 23. Feb 2011 14:16

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Zitat:

Zitat von jfheins (Beitrag 1083777)
Du könntest natürlich auch RO13, oder base64 anwenden, wobei das keine Verschlüsselungsalgos sind. (Sie täuschen sogar Sicherheit vor, wo keine ist.)

Rot13 ist natürich ein Verschlüsselungsalgorithmus, und je nachdem wie weit man den Begriff fasst, könnte man auch Base64 als einen solchen bezeichnen, nur sind halt beide extrem schwach. Was du meintest sind wohl eher Hashs, denn die von dir aufgezählten Algorithmen MD5 und SHA-1 gehören zu dieser Gruppe, und keine Verschlüsselungsalgorithmen.

cookie22 23. Feb 2011 14:25

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Rot13 ist absolut ungeeignet um Daten zu verschlüsseln, dann kann man sie gleich im Klartext ablegen. Base64 ein Kodierungs-Algo also auch nicht geeignet.

Die Frage ist wie sicher muss das ganze sein und wozu speicherst du ein Passwort?

dust258 23. Feb 2011 14:39

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Es handelt sich um Usernamen und Passwörter von E-Mail Postfächern. Es sollte halt nicht jeder, der das Passwort für die Datenbank kennt alle Passwörter der User auslesen können. Daher steht sowas wie Base64 nicht wirklich zur Diskussion.

Satty67 23. Feb 2011 14:49

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Auf der Seite von C# bist Du sehr flexibel, das Cryptography Assembly bietet fast alles was das Herz begehrt und decryptete Strings lassen sich auch in beliebige Formate (ASCII, UTF8 etc.) encodieren.

Ich würde einfach mal eine Testanwendung in Delphi schreiben, die einen String encrypted und sehen, ob der String dann mit C# wieder entschlüsselt werden kann.

Sicherheit hast Du aber nur, wenn Dein Programm für die Enschlüsselung das Passwort jedesmal abfragt. Wenn Du es fest im Programm hinterlegst, ist es auch fast egal mit was Du die Daten verschlüsselst.

Blup 24. Feb 2011 10:12

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Zitat:

Zitat von dust258 (Beitrag 1083800)
Es handelt sich um Usernamen und Passwörter von E-Mail Postfächern. Es sollte halt nicht jeder, der das Passwort für die Datenbank kennt alle Passwörter der User auslesen können.

Fall 1:
Die Passwörter werden tatsächlich verwendet, z.B. um später E-Mails aus anderen Quellen abzurufen, ohne das der Benutzers dieses erneut eingibt.
> Das Passwort muss verschlüsselt abgelegt werden.

Fall 2:
Die Passwörter dienen dazu, die Identität des User bei der Anmeldung an deinem System sicher zu stellen.
> Es genügt einen Hash vom Passwort zu bilden und in der DB abzulegen.
Bei Anmeldung des Benutzers wird erneut der Hash des eingegebenen Passwort gebildet und verglichen.

himitsu 24. Feb 2011 10:24

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Das Problem ist allerdings, daß du passend zum verschlüsselten Passwort direkt im Programm die Entschlüsseltungsmethode mitlieferst.
Also egal wie sicher die Verschlüsselung ist, da die Entschlüsselung immer mitgeliefert ist, kann man alles knacken, abgesehn davon, daß man das unverschlüsselte Passwort auch direkt aus dem Arbeitsspeicher rauskopieren könnte, wärend dein Programm dieses entschlüsselt hat, zur Anmeldung am Postfach.
(oftmals werden solche Passwörter sogar unverschlüsselt zum Mailserver übertragen, so daß man es auch noch im Netzwerktrafic leicht mitloggen kann und dann eh jeder vorherige Verschlüsslung umsonst war)

Da kann man also auch ein einfaches XOR oder Dergleichen nehmen.



Komplett unverschlüsselt würde ich diese Daten aber nicht speichern. (das wäre ja zu einfach :stupid: )

gammatester 24. Feb 2011 11:04

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Zitat:

Zitat von himitsu (Beitrag 1084017)
Das Problem ist allerdings, daß du passend zum verschlüsselten Passwort direkt im Programm die Entschlüsseltungsmethode mitlieferst.

Ja und? Es ist eine eiserne Regel der modernen Kryptographie, daß die Sicherheit nur im Schüssel liegt und die Methode im Gegensatz zu Deiner Behauptung veröffentlicht ist (damit man sie reviewen und verbessern kann).

Was natürlich nicht gut wäre, den Schlüssel ungeschützt im Programm zu verwenden. Man kann ihn zur Laufzeit aus einem verschlüsselten Schlüssel berechnen. Ein ähnliches Prinzip wenden zB PGP und Konsorten an (die berechnen via Passwort die privaten Schlüssel aus einem verschlüsselten Schlüsselbund); diese Programme wäre gemäß Deiner Theorie völlig unsicher.

himitsu 24. Feb 2011 11:08

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Wenn das Programm aber selbstständig entschlüsseln soll, liegt demnach der Schlüssel auch mit in der EXE.
Gut, jetzt kann man diesen Schlüssel ebenfalls verschlüsseln, aber wohin dann mit dem Schlüssel für den Schlüssel? :stupid:

Wie gesagt, wen die Anwendung es selbstsändig entschlüsseln soll, dann liegt auch alles Nötige, zum Entschlüsseln, irgendwo "ungeschützt" rum.

Satty67 24. Feb 2011 11:14

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Zitat:

Zitat von himitsu (Beitrag 1084035)
Wenn das Programm aber selbstständig entschlüsseln soll, liegt demnach der Schlüssel auch mit in der EXE.

Wollte erst gammatester zustimmen, aber der nachgelieferte Zusatz macht klar was gemeint war. War im ersten Post wohl etwas zweideutig.

gammatester 24. Feb 2011 11:15

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Zitat:

Zitat von himitsu (Beitrag 1084035)
Wenn das Programm aber selbstständig entschlüsseln soll

Diese Anforderung kann ich nicht in den Beitragen von dust258 finden.

himitsu 24. Feb 2011 11:20

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
@gammatester: Wie sind Hellseher :wink::lol:
:glaskugel:

Aber hast schon Recht, wenn er nun für's Verschlüsseln in Delphi ein Passwort nimmt und dann in C# jeweils das Passwort wieder abfragt und damit dann entschlüsselt, dann wäre es sicherer.
> Abgesehn davon, daß dann das Passwort 'ne Weile unverschlüsselt im RAM rumliegt (ich hoffe mal er hasht es sofort) oder der beliebte Tastatturlogger oder am Ende dann doch wieder eine unverschlüsselte Verbindung zum Mailserver.

p80286 24. Feb 2011 11:38

AW: Passwort verschlüsselt in Datanbank schrieben und mit C# auslesen
 
Zitat:

Zitat von dust258 (Beitrag 1083800)
Es handelt sich um Usernamen und Passwörter von E-Mail Postfächern. Es sollte halt nicht jeder, der das Passwort für die Datenbank kennt alle Passwörter der User auslesen können. Daher steht sowas wie Base64 nicht wirklich zur Diskussion.

Wie wäre es denn, die Möglichkeiten der Benutzerverwaltung der Datenbank zu nutzen?
Auch wenn es wohl in Vergessenheit geraten ist, die meisten Datenbanken gestatten es mehrere Benutzer mit höchst unterschiedlichen Rechten anzulegen.
Ene zusätzliche Verschlüsselung ist natürlich nicht falsch.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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