Passwörter sicher ablegen

Rahmspinat

Aktives Mitglied
Hallo Leute,

ich will ein Programm schreiben das Lokal ausgeführt wird.

Dieses Programm muss Passwörter nutzen um auf bestimmte APIs zugreifen zu können.

Nicht jeder soll wissen wie diese Passwörter sind, sondern das Programm einfach nur nutzen.

Das Problem das ich mit Verschlüsselung solcher Passwortdateien habe ist, das man die .jar Dateien ja wieder in lesbaren code umwandeln kann und dann die verwendete verschlüsselungsmethode sehen kann.

Wie kann ich die Passwörter also sicher verstecken?

Habt ihr einen Tipp für mich oder ein ähnliches Problem schon gehabt?

Wie habt ihr das gelöst?
 

RySa

Bekanntes Mitglied
Speicher die Passwörter doch einfach mal als MD5 checksum ab, und wandle die eingegebenen Passwörter (zum einloggen nehme ich an) ebenfalls in MD5 und vergleiche die beiden bei der Passwort abfrage. Du könntest auch vielleicht ne kleine Datenbank benutzen, aber es wäre glaube ich "mit kanonen auf Spatzen schießen". Versuch es einfach mit der MD5-Checksum, das wird für einen "normalen Benutzer" nicht zu entschlüsseln sein.
 

turtle

Top Contributor
Mir wird immer mulmig, wenn ein Client-Programm Passwörter "irgendwo" ablegen muss.

Ich empfehle hierfür einen Zwischenserver (Proxy).

Also Dein Client-Programm fragt Deinen (einzurichtenden) Server nach "Dingen" über eine bestimmte API. Dein Server leitet die Anfrage mit dem korrekten Passwort an die richtige API weiter. Somit muss Dein Client-Programm überhaupt keine Passwörter kennen (und speichern), sondern dies Aufgabe des Servers, der unter Deiner Kontrolle steht.
 
S

SlaterB

Gast
der Benutzer soll ja nichts eingeben
und es geht gerade darum vor dem die Passwörter zu verbergen, nicht dessen Passwörter zu speichern

@Rahmspinat
mal eine andere Betrachtung:
wenn du Angst hast, dass die Passwörter aus dem Quellcode gelesen werden können, obwohl dort vielleicht kompliziert mit Code zusammengesetzt,
was spricht dann eigentlich gegen einen generellen Umbau des Programms durch einen Angreifer,
so dass es zwar weiterhin das 'sichere', unbekannte Passwort verwendet,
aber genau über diesen vorhandenen Kanal die neuen Daten sendet und empfängt die der Angreifer haben möchte?

ein ähnliches Thema, wenn auch bisher nicht unbedingt mit wertvollen Erkenntnissen:
http://www.java-forum.org/netzwerkprogrammierung/125719-highscore-online-speichern.html
 
Zuletzt bearbeitet von einem Moderator:

Andi_CH

Top Contributor
MD5 ist vielleicht etwas zu banal, weil die Checksumme vermutlich kürzer als das Passwort ist und somit verschiedene Passwörter zu derselben MD5 Checksumme führen.

Wenn du etwas Sicheres willst, such danach wie Linux/Unix das macht - die verwenden IMO (und aus dem Gedächnis widergeben) einen Algortihums bei dem das Resultat mindestens so lang wie das eingegeben Passwort ist (Stichwort salt and pepper). Der Algorithum ist nicht umkehrbar - das heisst du kannst das Passwort nicht mehr rekonstruieren. Das ist auch nicht nötig, denn ein eingegebenes Passwort wird chiffriert und die beiden Chiffrate miteinander verglichen.
 
Zuletzt bearbeitet:

Rahmspinat

Aktives Mitglied
Hallo Leute,

danke für die vielen Antworten, sorry für die späte Rückmeldung :)

@RySa: Das Programm wird zwar nur Firmen intern genutzt aber ich kenne die ganzen Leute nicht die es nutzen werden, daher ist für mich nicht Einschätzbar, ob sie damit etwas anstellen können oder nicht. Ich will keine Probleme bekommen weil ich jetzt sage: "ach das passt schon so" :)

@turtle: Mir wird da auch mumlig, deswegen wollte ich mal fragen was es da so für Möglichkeiten gibt. Man weiß ja nicht was man nicht weiß :).
Darüber das Passwort auf einen Server auszulagern, der dann die Abfragen für den Client übernimmt, hab ich auch nachgedacht, das ist denke ich, wie ich das jetzt mitbekommen habe, die beste und sicherste Methode.

@SlaterB: interessante Betrachtungsweise. Das gibt einem ja ein ganz mulmiges Gefühl :) noch ein Punkt der für eine Auslagerung auf einen Server spricht.

@Andi_CH: Leider muss ich das Passwort wieder rekonstruieren, weil ich mich für die API identifizieren muss.


Ich denke ich werde das wirklich so machen, dass ich die direkte Kommunikation mit der API auf einen Server auslagere. Dort stelle nur alle Methoden zur Verfügung die der Client wirklich braucht, damit er keinen Mist machen kann. Die Schnittstelle zum Server werde ich wieder mit einem Passwort ausstatten, dessen Verlust dann aber dann nicht so schlimm ist wie das Passwort zur API.

Danke für eure Antworten. Wenn ihr noch etwas anmerken möchtet, immer her damit :)
 

freez

Top Contributor
@turtle: Mir wird da auch mumlig, deswegen wollte ich mal fragen was es da so für Möglichkeiten gibt. Man weiß ja nicht was man nicht weiß :).
Darüber das Passwort auf einen Server auszulagern, der dann die Abfragen für den Client übernimmt, hab ich auch nachgedacht, das ist denke ich, wie ich das jetzt mitbekommen habe, die beste und sicherste Methode.

Jetzt mal ehrlich: lass doch gleich dass Passwort auf dem Server weg (mal banal gesprochen). Du hast ein sicheres System, welches du mit einem Proxy aushebeln willst. Sollte es nicht dein Server sein, von dem die Daten gelesen werden sollen, solltest du mal mit dem Server Owner reden, ob er so einen Zugriff überhaupt erlauben möchte, da ja über so einen Proxy prinzipiell jeder Daten austauschen kann. Genauso verhält es sich mit einem Client, wenn er keine Authentifizierung nutzt und ich als "Angreifer" nur deine Software benötige.

Machen wir es kurz: Hier muss man genau analysieren, was du vorhast, um die sicherste Variante zu finden. Wichtig wäre:
  • welches Protokoll wird benutzt um mit dem Server zu komunizieren
  • wie sicher müssen diese Daten auf dem Server vor Zugriff geschützt sein? Kann man vielleicht readonly Accounts nutzen?
  • Hat dein Client bereits eine Authentifizierung
  • Wie Authentifizieren sich die anderen User an dem Server
  • Gehört dir der Server mit dem Daten ausgetauscht werden soll?
  • Kannst du mit dem Serverowner dein Problem evtl. besprechen? Vielleicht hat er ja eine Idee, wie man dein Problem einfacher mit dem Server ändern kann?
  • Was spricht denn eigentlich dagegen, dass die User personalisierte Accounts auf dem Server bekommen und in deinem Client diese Informationen eingeben?
  • muss deine Anwendung unbedingt lokal ausgeführt werden, oder kann es auch eine Webanwendung sein, wo die Zugangsdaten nur auf dem Webserver geschützt liegen?

Vielleicht gibt es noch mehr Fragen, aber momentan fällt mir nicht mehr ein.
 
Zuletzt bearbeitet:

Rahmspinat

Aktives Mitglied
Danke für die weiteren Einträge :)

@freez:

Der Server gehört mir nicht und Besitzer werden mir auch nicht großartig zuhören.

Was spricht denn eigentlich dagegen, dass die User personalisierte Accounts auf dem Server bekommen und in deinem Client diese Informationen eingeben? -> finde ich eine gute Idee, werde ich machen

muss deine Anwendung unbedingt lokal ausgeführt werden, oder kann es auch eine Webanwendung sein, wo die Zugangsdaten nur auf dem Webserver geschützt liegen? -> aus Zeitgründen muss das erstmal alles lokal durchgeführt werden. Das Grundprogramm dazu steht schon, wurde schon in einem sehr kleinen Kreis oft genutzt

Danke für deinen Beitrag, der hat mich nochmal auf ein paar andere Gedanken gebracht :)

@Jvooy: Das ganze werde ich zur Passwortübermittlung zwischen Client und Server nutzen, danke
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Passwörter sicher (verschlüsselt) lokal speichern Allgemeine Java-Themen 3
JavaNewbie2.0 Benutzer/Passwörter verwalten Allgemeine Java-Themen 11
Mike90 Passwörter speichern Allgemeine Java-Themen 2
O Hash Wert von Passwörter erstellen (SHA) Allgemeine Java-Themen 9
M Passwörter in Einstellungen speichern Allgemeine Java-Themen 2
OnDemand Zugangsdaten externer Systeme sicher speichern Allgemeine Java-Themen 8
I Datentypen String in class sicher verwahren Allgemeine Java-Themen 17
K API-Key sicher speichern Allgemeine Java-Themen 2
T In Java String sicher verschlüsseln Allgemeine Java-Themen 6
W Passwort Clientseitig sicher ablegen ohne Hash Allgemeine Java-Themen 2
M HTTP Client Zertifikat sicher übertragen? Wie? Allgemeine Java-Themen 2
C Zugangsdaten halbwegs sicher speichern Allgemeine Java-Themen 46
G Threads Referenzoperationen sicher? Allgemeine Java-Themen 20
T Hardware sicher entfernen Allgemeine Java-Themen 8
T Ist dieser Code sicher gegen concurrent modifications? Allgemeine Java-Themen 6
L Datei sicher löschen/mehrfach überschreiben? Allgemeine Java-Themen 2
reibi Sicher ein File lesen Allgemeine Java-Themen 28
S Launch4j .exe-Datei sicher? Allgemeine Java-Themen 5
P Servlet Eingaben sicher machen Allgemeine Java-Themen 5
C Passwort sicher speichern Allgemeine Java-Themen 5
K Collections oder Vektoren sicher zu serialisieren? Allgemeine Java-Themen 5
I Rückgabe eines Arrays aus einer Methode, wie sicher? Allgemeine Java-Themen 3
M Mehrere Ressourcen in einem package ablegen Allgemeine Java-Themen 1
B API Token in Datenbank ablegen? Allgemeine Java-Themen 9
O verschlüsseltes Passwort ablegen Allgemeine Java-Themen 12
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
Developer_X Sun Vorschläge zu neuem Java ablegen Allgemeine Java-Themen 4
MQue FTP Server/ Datei ablegen Allgemeine Java-Themen 4
J Daten in Objekt ablegen Allgemeine Java-Themen 4
oliver1974 Wo ResourceBundles ablegen? Allgemeine Java-Themen 3
A XML files in hashmap ablegen? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben