Hallo,
ich bin dabei eine Desktop Applikation zu erstellen, inkl. einer H2 Datenbank.
In dieser Datenbank möchte ich ebenfalls Passwörter speichern, damit sich das Programm beim Emailprovider, einer API etc. anmelden kann.
Das ganze soll so funktionieren, dass man das Passwort einmalig eingibt. Der User muss sich nicht jedes Mal gegen den Provider anmelden.
Daher muss ich das Passwort in der Datenbank speichern.
Das Passwort soll natürlich nicht in Klarschrift gespeichert werden, sondern verschlüsselt.
Nun ist meine Frage, wie ich das sicher gestalten kann.
Nach meinem Verständnis benötige ich ein "Salt", was ich ja ebenfalls irgendwo ablegen muss, sodass man das verschlüsselte Passwort später wieder entschlüsseln kann.
Folgende Möglichkeiten sehe ich:
1) Salt ebenfalls in der Datenbank ablegen
-> Dann in das Problem aber, wenn jemand die H2 Datenbank (File) an jemand weitergibt, hat er ebenfalls Zugriff
-> Wenn man die Desktop Applikation aber auf einem anderen Rechner installiert, benötigt man keinen Aufwand die Passwörter erneut anzulegen etc. Gerade aber vielleicht bei Support Themen würde es Sinn machen mal eine Datenbank an den Support zu übermitteln.
2) Salt wird aus DeviceId generiert
-> Da die Applikation nur auf dem Server läuft, könnte man sich während der Laufzeit eine DevideId (CPU, Netzwerkkarte etc.) generieren. Dies ist dann der Salt. Klar, wenn man etwas an den Parameter (Netzwerkkarte etc.) ändert, funktioniert das nicht mehr.
3) Salt in Textfile speichern
Salt wird nicht direkt in der Datenbank gespeichert, sondern in einem Textfile. Man muss hier nun eben aufpassen, dass das Textfile nicht mit der DB weitergegeben wird.
-> Wenn man die Desktop Applikation aber auf einem anderen Rechner installiert, benötigt man keinen Aufwand die Passwörter erneut anzulegen etc.
Dass das ganze nie 100% sicher gehen kann, ist mir klar.
Sobald jemand den Code dekompiliert, dann könnte er entsprechend Rückschlüsse ziehen auf das Passwort.
Ich freue mich auf jede Hilfe.
ich bin dabei eine Desktop Applikation zu erstellen, inkl. einer H2 Datenbank.
In dieser Datenbank möchte ich ebenfalls Passwörter speichern, damit sich das Programm beim Emailprovider, einer API etc. anmelden kann.
Das ganze soll so funktionieren, dass man das Passwort einmalig eingibt. Der User muss sich nicht jedes Mal gegen den Provider anmelden.
Daher muss ich das Passwort in der Datenbank speichern.
Das Passwort soll natürlich nicht in Klarschrift gespeichert werden, sondern verschlüsselt.
Nun ist meine Frage, wie ich das sicher gestalten kann.
Nach meinem Verständnis benötige ich ein "Salt", was ich ja ebenfalls irgendwo ablegen muss, sodass man das verschlüsselte Passwort später wieder entschlüsseln kann.
Folgende Möglichkeiten sehe ich:
1) Salt ebenfalls in der Datenbank ablegen
-> Dann in das Problem aber, wenn jemand die H2 Datenbank (File) an jemand weitergibt, hat er ebenfalls Zugriff
-> Wenn man die Desktop Applikation aber auf einem anderen Rechner installiert, benötigt man keinen Aufwand die Passwörter erneut anzulegen etc. Gerade aber vielleicht bei Support Themen würde es Sinn machen mal eine Datenbank an den Support zu übermitteln.
2) Salt wird aus DeviceId generiert
-> Da die Applikation nur auf dem Server läuft, könnte man sich während der Laufzeit eine DevideId (CPU, Netzwerkkarte etc.) generieren. Dies ist dann der Salt. Klar, wenn man etwas an den Parameter (Netzwerkkarte etc.) ändert, funktioniert das nicht mehr.
3) Salt in Textfile speichern
Salt wird nicht direkt in der Datenbank gespeichert, sondern in einem Textfile. Man muss hier nun eben aufpassen, dass das Textfile nicht mit der DB weitergegeben wird.
-> Wenn man die Desktop Applikation aber auf einem anderen Rechner installiert, benötigt man keinen Aufwand die Passwörter erneut anzulegen etc.
Dass das ganze nie 100% sicher gehen kann, ist mir klar.
Sobald jemand den Code dekompiliert, dann könnte er entsprechend Rückschlüsse ziehen auf das Passwort.
Ich freue mich auf jede Hilfe.