Hi,
ich schreibe gerade ein kleines Programm, welches auf eine MySQL DB zugreift. Die Logindaten sollen hier vom User einstellbar sein, also nicht hard coded.
Die simpelste möglichkeit ist, die Daten in properties.settings.default zu spiechern, allerdings werden die Daten ja hierbei plain in eine XML Datei geschieben, was bei Passwörtern etc denkbar ungeschickt ist.
Meine Frage: ist es irgendwie möglich, diese Programmeinstellungen nicht als XML sondern einem automatisch verschlüsselten Dateiformat abzulegen?
Wenn nicht, wie speichert man dann sensible Daten am sinnvollsten? Verschlüsseln und in eine Datei schreiben, die immer ausgelesen werden muss oder gibts da was einfacheres fertiges?
Danke & MfG
Hallo,
Einwegverschluesseln, bei Verlust neu generieren.
Btw. Ich traue keiner Software/Seite, die mir mein Passwort zurueckschicken kann 🙂
Gruss
purestrain
Edit:
Ich dachte ein reine Benutzer-PW.
Original von purestrain
Hallo,Einwegverschluesseln, bei Verlust neu generieren.
Hm, wie soll das funktionieren? Wenn ich das vom User eingegebene Passwort zB per MD5 verschlüssel und abspeicher, kann ich es nicht mehr an den SQL-Server schicken...
Oder hat MySQL da eine Anmeldemöglichkeit die ich noch nicht kenne?
Hallo,
Original von hirschkadaver
Oder hat MySQL da eine Anmeldemöglichkeit die ich noch nicht kenne?
Dieses wäre genauso sicher, bzw. unsicher, als würde man das Passwort als Plaintext ablegen.
Wenn ich mich z.B. mit dem MD5 Hash von meinem Datenbankpasswort auch anmelden könnte, wäre die nächste Frage, wie ich denn den MD5 Hash des Datenbankpasswortes sicher abspeichere?
Wenn ich den in die App-Config in Plaintext hinterlege, liest ein Angreifer den Hash aus, und kann sich dann damit bei der DB anmelden. Sicherheitszugewinn geht gegen Null.
Das beste wäre:
Wenn der User dein Programm startet, muss dieser ein Passwort angeben. Aus diesem Passwort wird ein Key abgeleitet, mit dem das Datenbankpasswort dann entschlüsselt wird.
Da die meisten User aber nicht bereit sind, bei Programmstart ein Passwort anzugeben, entfällt diese Variante leider meistens.
Sonst kann man auf sogenannte Schlüsselcontainer zurückgreifen:
Gewusst wie: Speichern von asymmetrischen Schlüsseln in einem Schlüsselcontainer
Sein DB-Passwort verschlüsselt in einer Datei abzuspeichern ist aber so oder so problematisch.
Was ist, wenn der Angreifer die Datei kopiert und dann dein Programm startet und so Zugang zu DB hat?
Wenn er den Netzverkehr mitschneidet, bekommt er sogar in Klartext das Passwort.
Eine umständliche Lösung per SSL würde hier abhilfe schaffen, indem der Fingerabdruck/Hashwert der Zertifikates mitverwendet wird, um das Datenbankpasswort zu verschlüsseln.
Kopiert ein Angreifer dann die Datei mit dem verschlüsselten Passwort und möchte sich an einem anderen Server damit anmelden, um so am Server das Passwort zu erhalten/mitzulesen, zu würde ein anderes Zertifikat ja für SSL Verbindung verwendet werden* => anderer Fingerabdurck => anderer/falsche Key zum entschlüsseln des Datenbankpasswortes.
Wie du siehst, ist es gar nicht so leicht, hohe Sicherheit ohne Komforteinschränkungen zu bieten.
*: Wenn der Angreifer das orginal Zertifikat + private Key hat, würde die Schwachstelle nicht mehr beim Client zu suchen sein.
Wie ich oben geschrieben habe; Ich war der annahme das es sich um ein reines Benutzer-PW o.ae. handelt; Login habe ich uebersehen.
Original von Andavos
Dieses wäre genauso sicher, bzw. unsicher, als würde man das Passwort als Plaintext ablegen.
Wenn ich mich z.B. mit dem MD5 H...
Manchmal sollte man einfach denken bevor man sich komplett lächerlich macht... stimmt natürlich, das war sehr dämlich von mir 🙂
Das Programm ist eigentlich ausschließlich für mich gedacht, es wird auf exakt 2 PCs auf der Welt laufen, nämlich zuhause und im Geschäft. Daher muss nicht alles 100%ig dicht sein, aber das PW sollte auch eben nicht gerade als Klartext irgendwo stehen.
Deswegen danke ich, dass ich auf SSL etc verzichten kann. Das einfache verschlüsselte Speichern in einer Datei sollte in meinem Fall eigentlich reichen.
Danke an alle für die Tipps