Passwort in Datenbank speichern um später wieder auszulesen

internet

Top Contributor
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.
 

Robert Zenz

Top Contributor
Nein, du hast bereits verloren...und du hast es falsch verstanden.

Du hast offensichtlich mal gehoert wie man Passwoerter sicher in einer Datenbank speichert, hast dabei aber nicht verstanden das es dabei darum geht nur verifizieren zu muessen ob das Passwort noch uebereinstimmt mit einem anderen, eingegebenen. Hashing ist hier das Wort der Wahl, aber Hashing ist ein Einweg-Prozess, man kann aus einem Hash nicht mehr den urspruenglichen Wert zurueckrechnen. Man kann nur mit roher Gewalt alle moeglichen Werte durchprobieren ob diese wieder den gleichen Hash erzeugen. In der Zwischenzeit gibt es riesige vorgefertigte Regenbogentabellen welche bereits alle Werte und deren Hash enthalten, man muss also nur noch den Hash in diesen Tabellen suchen. Deswegen versalzt man die Werte welche man speichert mit einem eigenen Salz pro Wert, weil dann ein Angreifer gezwungen ist jeden Wert wieder selbst auszurechnen da es dafuer ganz sicher keine vorgefertigten Tabellen gibt.

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.

Nun hast du aber die Anforderung dass du das Passwort vom E-Mail Konto wieder im Klartext brauchst, also was auch immer du da machst, der Vorgang muss rueckgaengig gemacht werden koennen, auch bekannt als encryption, weil das ist ein Zweiwege-Prozess, man kann es wieder rueckgaengig machen. Und das ist die Stelle wo du jetzt verloren hast, weil was auch immer du tust, jemand anderes kann diese Schritte emulieren um wieder den urspruenglichen Wert zu erhalten. Jetzt gibt es da nur zwei Loesungsansaetze:

Erstens, der Benutzer gibt das Passwort jedes mal ein. Nicht so toll.

Zweitens, du verschluesselst das Passwort mit einem Schluessel welcher vom Benutzer bei jedem Start der Applikation zur Verfuegung gestellt wird, entweder in Form eines Passworts (Master-Passwort wie man es von Browsern kennt) oder in irgendeiner anderen Form (Smartcard?). Alternativ kann man auch einen Mechanismus vom Betriebssystem verwenden, ist aber schwieriger.

So oder so, du hast bereits verloren denn du musst die Anforderung erfuellen dass das Passwort wieder in Klartext ueberfuehrt werden koennen muss.
 

LimDul

Top Contributor
Salt hat damit nix zu tun. Salting ist ein Verfahren um beim Hashing die Komplexität zu erhöhen, damit man nicht einfach mit Rainbow Tables das Passwort ermitteln kann.

Was du brauchst, ist der Schlüssel zum dekodieren des gespeicherten Passwortes. Wo und wie du den Schlüssel ablegst/ermittelst, das ist die spannende Frage.

Grundsätzlich gibt es - wie du schon festgestellt hast - dafür zwei Verfahren:
a) Den Schlüssel persistent abzulegen.
Problem: Wer den Schlüssel hat, kann damit die Passwörter dekodieren.
b) Den Schlüssel zur Laufzeit aus bestimmten Informationen ermitteln.
Problem: Wie stellt man sicher, dass diese Informationen stabil sind und nicht genauso trivial ermittelbar wie der persistierte Schlüssel


Aus dem Bauch heraus finde ich das sinnvollste, wenn man b) verwendet und dabei möglichst Benutzerspezifische, nicht öffentliche Informationen verwendet. Wenn deine Anwendung einen Login verlangt, dann kann man z.B. den Schlüssel aus dem Passwort des Users ermitteln.
Alternativ kann man vielleicht auf die OS Anmelde-Infos zugreifen.
 

Robert Zenz

Top Contributor
Um doch noch konkreter zu werden, in Windows gibt es CryptProtectData um Daten anhand des aktuellen Logins zu verschluesseln.

Auf macOS gibt es eine aehnliche Funktion um sich ein Schluesselpaar zu erstellen und dieses im aktuellen Konto zu hinterlegenn, da kenne ich aber die Details nicht.

Auf Linux gibt es diverse Schluesselringe die ebenfalls eine solche Funktionalitaet unterstuetzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Frame mit Passwort-Eingabe (Datenbank) Java Basics - Anfänger-Themen 6
L 4 stelliges Passwort aus bestimmten Zeichen. Java Basics - Anfänger-Themen 27
M Passwort erraten Java Basics - Anfänger-Themen 1
A Passwort erstellen Java Basics - Anfänger-Themen 3
H Passwort Brute Force rekursiv Java Basics - Anfänger-Themen 7
JavaBeginner22 Passwort Generator Java Basics - Anfänger-Themen 2
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
L Rekursiv gegebenes Passwort herausfinden. Java Basics - Anfänger-Themen 2
C Passwort abprüfen Java Basics - Anfänger-Themen 5
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
cpt.Tomato Scanner problem mit Passwort Login Java Basics - Anfänger-Themen 3
B Email versand - aber akzeptiert auch falscher Username und Passwort??? Java Basics - Anfänger-Themen 1
N Passwort Anfrage vor Programm start Java Basics - Anfänger-Themen 1
K Methoden Passwort Bestätigungsfeld mit Password vergleichen Java Basics - Anfänger-Themen 7
A Passwort System Java Basics - Anfänger-Themen 4
G Passwort und Passwort wiederholen in if-Abfrage vergleichen Java Basics - Anfänger-Themen 15
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
J Passwort überprüfen Java Basics - Anfänger-Themen 3
B Passwort prüfen bis eindeutig - while Schleife? Java Basics - Anfänger-Themen 11
C Encrypted (passwort) Rar Datei entpacken Java Basics - Anfänger-Themen 42
Detox Passwort verschleiern Java Basics - Anfänger-Themen 4
A Erste Schritte Passwort an "Internetseite" übergeben. Java Basics - Anfänger-Themen 2
B Passwort zurücksetzen Java Basics - Anfänger-Themen 1
U Passwort verschlüsseln schlägt fehl Java Basics - Anfänger-Themen 3
T Passwort Generator Java Basics - Anfänger-Themen 2
B If Abfrage mit Passwort und Username Java Basics - Anfänger-Themen 2
fLooojava Passwort generieren - kleines Programm Java Basics - Anfänger-Themen 15
Z User/passwort eingabe...Help! Java Basics - Anfänger-Themen 4
M Passwort-Generator Java Basics - Anfänger-Themen 3
S Passwort Manager Java Basics - Anfänger-Themen 2
J Passwort Java Basics - Anfänger-Themen 4
A Passwort Schutz Java Basics - Anfänger-Themen 8
U Passwort auf JButton setzen. Java Basics - Anfänger-Themen 2
P Passwort Abfrage Java Basics - Anfänger-Themen 3
F Login Passwort-Vergleich Java Basics - Anfänger-Themen 12
c_sidi90 Passwort Generator Code Erweiterung Java Basics - Anfänger-Themen 12
K Methode Passwort generieren Java Basics - Anfänger-Themen 10
F OOP Textdatei zippen und mit Passwort sichern Java Basics - Anfänger-Themen 5
Benji0815 Java Passwort in Formular eingeben Java Basics - Anfänger-Themen 5
G Passwort verschluesselt speichern Java Basics - Anfänger-Themen 7
M Regular Expression - Passwort - aufeinanderfolgende Zeichen Java Basics - Anfänger-Themen 3
H Passwort einlesen funktioniert nicht wie gewünscht Java Basics - Anfänger-Themen 5
S Erster Versuch: Passwort erstellen Java Basics - Anfänger-Themen 3
S String Vergleich mit Passwort geht nur bei Zahlen ? Java Basics - Anfänger-Themen 7
S Vergleichen von verschlüsselten Passwort Java Basics - Anfänger-Themen 3
G Passwort vor unbefugtem Zugriff schützen Java Basics - Anfänger-Themen 7
D Passwort verschlüsseln mit MD5 Java Basics - Anfänger-Themen 30
P Passwort überprüfen mit regular Expression Java Basics - Anfänger-Themen 4
O Unsichtbares Passwort Java Basics - Anfänger-Themen 2
R Passwort Maskierung in der Konsole Java Basics - Anfänger-Themen 9
V Passwort-String byteweise in eine Datei schreiben Java Basics - Anfänger-Themen 6
T Passwort nicht in URL übergeben Java Basics - Anfänger-Themen 5
B Benutzername und Passwort an Internetseite übergeben Java Basics - Anfänger-Themen 3
B Passwort generator Java Basics - Anfänger-Themen 7
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
I Element n aus Datenbank Query (JPA / Hibernate) Java Basics - Anfänger-Themen 3
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
E schneller von der Datenbank abfragen Java Basics - Anfänger-Themen 15
E Datenbank Spalte zusammenzählen Java Basics - Anfänger-Themen 2
R Datenbank Java Basics - Anfänger-Themen 1
I API Key´s in der Datenbank decrypt / encrypten? Java Basics - Anfänger-Themen 23
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
M Von der Datenbank zum Textfield Java Basics - Anfänger-Themen 16
R Best Practice Logik in der Datenbank oder in Java? Java Basics - Anfänger-Themen 3
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
B Datenbank: Entity mit vielen Referenzen? Ansatz so ok? Java Basics - Anfänger-Themen 8
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Datenbank verbindung Java Basics - Anfänger-Themen 19
J Java Verbindung mit mysql Datenbank Java Basics - Anfänger-Themen 3
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
R Input/Output Verbindung mit mySql-Datenbank Java Basics - Anfänger-Themen 9
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
N (Java) Regristrierung und Login System mit einer Datenbank Java Basics - Anfänger-Themen 5
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
J Mit JSF Formular in Datenbank schreiben Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Verschiede Aktionen der Datenbank getrennt durchführen Java Basics - Anfänger-Themen 4
DaCrazyJavaExpert Datenbank wird nicht erstellt Java Basics - Anfänger-Themen 31
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
Meeresgott OOP Gui, Logik und Datenbank richtig aufbauen Java Basics - Anfänger-Themen 43
B Schreiben von zu vielen Einträgen in einer Datenbank Java Basics - Anfänger-Themen 9
S Datenbank auf Knopfdruck abfragen Java Basics - Anfänger-Themen 8
M Java als Webanwendung mit Datenbank abfrage Java Basics - Anfänger-Themen 3
N Datenbank mit GUI verbinden - Wie? Java Basics - Anfänger-Themen 5
1 Datenbank in Java Java Basics - Anfänger-Themen 1
M Erste Schritte Java Applet - HTML Seiten auslesen und in Access Datenbank schreiben? Java Basics - Anfänger-Themen 15
J Bücher Datenbank Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben