Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DB-Zugangsdaten verschlüsseln (https://www.delphipraxis.net/197605-db-zugangsdaten-verschluesseln.html)

p80286 21. Aug 2018 18:58

AW: DB-Zugangsdaten verschlüsseln
 
Man könnte ja auch einen base64(Hash(Password)) in der DB als Passwort hinterlegen.
Macht es etwas schwerer aber sicher?

Gruß
K-H

Zacherl 21. Aug 2018 19:22

AW: DB-Zugangsdaten verschlüsseln
 
Zitat:

Zitat von p80286 (Beitrag 1411242)
Man könnte ja auch einen base64(Hash(Password)) in der DB als Passwort hinterlegen.

Nene, es geht ja um das Passwort um die DB-Connection erstmal aufzubauen.

KodeZwerg 21. Aug 2018 19:36

AW: DB-Zugangsdaten verschlüsseln
 
Mit Hash meinte ich bestimmt was anderes als wie Du gerade.
Ich meinte, Hash in Datei speichern, im Programm, bei PW Abfrage, Hash auslesen, neuen Hash generieren, stimmt der Hash = DB damit füttern. Total simpel, angreifbar ist eh alles.

Schokohase 21. Aug 2018 20:01

AW: DB-Zugangsdaten verschlüsseln
 
@Kodezwerg

Der TE will die Anwendung starten OHNE das DB-Kennwort vom Benutzer zu erfragen. Im Idealfall soll dem Benutzer das DB-Kennwort gar nicht bekannt sein.

Ein Hash ist in diesem Szenario völlig unsinnig, denn das Kennwort selber wird für die Anmeldung benötigt.

Einen anderen Hash als Hash gibt es nicht - da gibt es also keine Verwechselungsgefahr

@Ykcim

Wenn du das vernünftig bzgl. der Sicherheit umsetzen willst dann brauchst du z.B. eine REST-API. Dann hast du diese ganzen Probleme nicht

KodeZwerg 21. Aug 2018 20:20

AW: DB-Zugangsdaten verschlüsseln
 
Zitat:

Zitat von Schokohase (Beitrag 1411247)
@Kodezwerg
Der TE will die Anwendung starten OHNE das DB-Kennwort vom Benutzer zu erfragen. Im Idealfall soll dem Benutzer das DB-Kennwort gar nicht bekannt sein.

Korrekt, deswegen schrieb ich ja etwas was keine externen Komponenten benötigt. XOR.
Zitat:

Zitat von Schokohase (Beitrag 1411247)
da gibt es also keine Verwechselungsgefahr

Wenn man Aussagen wahllos miteinander verknüpft schon. Meine Aussage mit Hash galt dem Vorschlag (weder vom TE noch mir) mit der PW Eingabe.

Ykcim 22. Aug 2018 12:36

AW: DB-Zugangsdaten verschlüsseln
 
Hallo Zusammen,

komme erst jetzt dazu, die Sache wieder aufzunehmen...

Kurz noch ein paar Info's, denn aus den Antworten konnte ich erkennen, dass ich mich nicht klar genug ausgedrückt habe.

Ich habe in der Anwendung eine eigene Benutzerverwaltung mit Rechten, in der der User selber sein Kennwort vergibt. Dieses Kennwort hat nichts mit der DB zu tun, sondern nur mit der Anwendung.
Die Userverwaltungsdaten werden ebenfalls in der DB gespeichert.

Das Kennwort für die DB ist dem User unbekannt und soll auch so bleiben. Ich habe es aber in einer TXT-Datei gespeichert, aus der meine Anwendung es ausliest und die Verbindung zu DB aufbaut.

Mein Programm wird nur von Usern verwendet, die auch einen Zugang haben. Aber wenn ein Unbefugter die TXT-Datei mit den DB-Zugriffsdaten findet, könnte er an meinem Programm vorbei direkt auf die DB zugreifen... Und das möchte ich gerne verhindern

Ich werde Euren Ideen folgen und versuchen, eine gute Lösung zu entwickeln. Bei Fragen / Erfolg melde ich mich wieder.

Vielen Dank
Patrick

rokli 22. Aug 2018 13:22

AW: DB-Zugangsdaten verschlüsseln
 
Hallo,

das kannst Du dann ja recht einfach mit einem MD5 machen ...

Der User gibt sein PWD ein und Du speicherst den MD5Hash in der INI (oder in der DB Userverwaltung) ...

Delphi-Quellcode:
function f_MD5Hash(sVal : String) : String;
{-------------------------------------------------------------------------------
   f_Md5Hash

      Erzeugt einen MD5 Hash Wert, der nicht zurück gewandelt werden,
      kann aber verglichen.
      Benötigt wird mindestens in der uses: IdHashMessageDigest.
      die Rückgabe ist immer 32 Zeichen lang

      Input:   STRING
      Output:   STRING

-------------------------------------------------------------------------------}
var
   idmd5 : TIdHashMessageDigest5;
begin
   idmd5      := TIdHashMessageDigest5.Create;
   result   := idmd5.HashStringAsHex(sVal);
   idmd5.Free;
end;
Und wenn der User sich wieder anmeldet prüfst Du die Eingabe, in dem Du den INI-Wert gegen den berechneten Wert prüfst. Dadurch bist Du sogar raus, wenn der Benutzer sein PWD vergessen hast, weil auch Du es nicht wiederherstellen kannst. Und wenn der User sich nicht erinnern kann, löscht Du den Hash in der INI (oder DB Userverwaltung) und lässt ihn ein neues eingeben.

Gruß

Schokohase 22. Aug 2018 13:31

AW: DB-Zugangsdaten verschlüsseln
 
@rokli

Es geht um die Zugangsdaten zur Datenbank, diese sollen dem Benutzer nicht bekannt sein.

Es geht nicht um die Zugangsdaten der Anwendung, die dem Benutzer sehr wohl bekannt sind, weil er diese selber festlegt (und diese sollten in der Datenbank nur als Hash gespeichert werden).

Um die Zugangsdaten der Anwendung aber überprüfen zu können muss es eine Verbindung zur Datenbank geben und dafür eben auch Zugangsdaten und diese sollen aber geheim sein (damit z.B. nicht jeder in der Datenbank herumpfuschen kann).

Dafür (und nur dafür) such der TE eine Lösung.

Zacherl 22. Aug 2018 13:45

AW: DB-Zugangsdaten verschlüsseln
 
Ich sehe leider keine Möglichkeit, wie man diesen Anwendungsfall unter den gegebenen Bedingungen absichern kann. Ob du die .txt nun verschlüsselst oder nicht, macht im Grunde keinen großen Unterschied. Du "schützt" dich vielleicht gegen Leute, die ausversehen mal einen Blick riskieren, aber wenn jemand wirklich an die Zugangsdaten gelangen will, bringt dir das komplett gar nichts. Wie gesagt, muss deine Anwendung ja auch den Schlüssel kennen, um die .txt vor dem Auslesen wieder entschlüsseln zu können. Dieser Schlüssel landet unweigerlich im Kompilat, weshalb man ihn daraus auch mit ein wenig Aufwand wieder extrahieren kann. Und schon ist der ganze "Schutz" futsch ...

Eine REST-API, wie sie von Schokohase schon vorgeschlagen wurde, hätte dieses Problem nicht. Direkter Zugriff auf die Datenbank ist IMMER unsicher, wenn du dem lokalen Client (Benutzer) nicht vertraust bzw. davon ausgehen kannst, dass deine Anwendung in falsche Hände gelangen könnte.

Selbst wenn du als schnellen Workaround nur die Authentifizierung über ein per SSL gesichertes Web-Interface realisierst und deine Anwendung nach erfolgreichem Login die Datenbank-Zugangsdaten gesendet bekommt, könnte der Nutzer sich immer noch mit einem Debugger dazwischenhängen und die unverschlüsselten Daten abgreifen, bevor deine Anwendung sie an die Datenbank überträgt :?

Ykcim 22. Aug 2018 13:48

AW: DB-Zugangsdaten verschlüsseln
 
Ja, das stimmt.

Ich habe das hier gefunden.
Delphi-Quellcode:
function XORCrypt(Data, Key: string): string;
var
  KeyLen: INTEGER;
  i: INTEGER;
begin
  KeyLen := Length(Key);
  for i := 1 to Length(Data) do
    Data[i] := Chr(Ord(Data[i]) xor Ord(Key[(i mod KeyLen) + 1]));
  Result := Data;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Res:String;
begin
 Res:=XORCrypt(Edit1.Text,'Kennwort');
 Label1.Caption:=Res;
 Label2.Caption:=XORCrypt(Res,'Kennwort')
end;
Ich glaube verstanden zu haben, dass wenn man längere Texte damit "verschlüsselt", dass die Wiederholungen sichtbar werden. Aber wenn es sich nur um kurze Daten wir IP-Adresse, User, Passwort, Port und Schema handelt, sollte es klappen.

Den Key würde ich zwar fix im QuellCode hinterlegen. Aber wenn jemand sich soviel Mühe macht und den herausfindet, dann wird es eh schwer werden. Neugierige, fortgeschritten User würde ich so wohl fernhalten, ambitionierte Hacker ehe nicht.

Was meint ihr?

Gruß Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.
Seite 2 von 6     12 34     Letzte »    

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