Discussion:
Passwort sicher mit Java verwalten
(zu alt für eine Antwort)
Joerg Luger
2004-10-29 21:25:51 UTC
Permalink
Hallo,

ich möchte ein Portal erstellen, mit dem ich u.a. meine Emails abrufen
kann. Die Emails möchte ich dabei online via imap anschauen oder per
pop3 als Sammeldienst abholen und dann anschauen. Dabei ist das
single-signon ein wichtiges Featuer. Um es zu erreichen, muss ich also die
ganzen Passwörter für meine Emailkonten auf dem Server speichern. Da ich
ungern Passwörter im Klartext auf Platte speichern, wollte ich sie mit
dem Login-Passwort des Users verschlüsseln. Dabei tritt das erste Problem
auf. Die Passwörter sollen nach dem Logout auch wieder aus dem Speicher
gelöscht werden. Soweit ich nun mitbekommen habe, sind String nicht
veränderlich. Man kann nur die Referenz auf das Objekt löschen und dann
hoffen, dass der gc seine Arbeit tut. Das ist zwar unschön aber noch
hinnehmbar. Ein größeres Problem ist, dass ich auch One-Time Passwörter
möchte. Und damit ist dann mein schöner Plan hinfällig. Hat jeman ein
Mehtode parat, wie ich die Passwörter möglichst sicher mit Java auf dem
Server speichern kann. Ich möchte dabei keinen Applikation Server sondern
nur einen Servlet-Container wie Tomcat verwenden müsen.

MfG Jörg Luger
Johannes Schneider
2004-10-29 21:32:12 UTC
Permalink
Post by Joerg Luger
Hat jeman ein
Mehtode parat, wie ich die Passwörter möglichst sicher mit Java auf dem
Server speichern kann. Ich möchte dabei keinen Applikation Server sondern
Hoi,

wie immer ist es so, dass wenn du die Passwörter entschlüsseln kannst,
dann kann ein Angreifer mit freiem Zugriff auf den Server das auch, weil
er ja alle Möglichkeiten in den Händen hält...
Die Frage ist jetzt eher, wie sicher es wirklich sein muss - Passwörter
in "verlorenen" Strings wiederzufinden ist mit Sicherheit eher ein
aufwändiger Weg.

Wenn ich Zugriff auf den Server hätte, würde ich einfach einen Sniffer
installieren (POP3 lässt grüßen) - dann kannst du deine Passwörter von
mir aus auch auf dem Client ver-/entschlüsseln...


mfg

Johannes Schneider
Joerg Luger
2004-10-30 23:05:58 UTC
Permalink
Post by Johannes Schneider
Hoi,
wie immer ist es so, dass wenn du die Passwörter entschlüsseln kannst,
dann kann ein Angreifer mit freiem Zugriff auf den Server das auch, weil
er ja alle Möglichkeiten in den Händen hält...
Wenn der User das passwort hat, muss er warten bis er der sich anmeldet.
Post by Johannes Schneider
Die Frage ist jetzt eher, wie sicher es wirklich sein muss - Passwörter
in "verlorenen" Strings wiederzufinden ist mit Sicherheit eher ein
aufwändiger Weg.
Im Linux-Kernel gab es mal einen Bug mit dem man den Speicher auslesen
konnte. Ich weiß nur nicht ob man root-Rechte brauchte.
Post by Johannes Schneider
Wenn ich Zugriff auf den Server hätte, würde ich einfach einen Sniffer
installieren (POP3 lässt grüßen) - dann kannst du deine Passwörter
von mir aus auch auf dem Client ver-/entschlüsseln...
Wenn der User nicht angemeldet ist, wird auch nichts gemacht. Sprich er
kann seinen Sniffer laufen lassen bis er alt ist, wenn der User sich nicht
anmeldet bekommt er nichts.

Ich habe natürlich auch noch vor ein paar Monitoring-Tools zu
installieren. Die darf er dann nicht einfach ausschalten, sondern muss Sie
faken. Das ist zwar möglich, ich will das System aber auch nur gegen
Script-Kidies und Möchtegern-Hacker absichern (Wenn Sie mit dem Exploit
eines anderen reingekommen sind). Wer wirklich gut ist (der Exploit-Autor
z.B.), den kann ich nicht aufhalten und der wird sich auch nicht für mein
System interessieren (Der ist entweder nicht kriminiell oder geht dahin,
wo es was zu holen gibt.)
Post by Johannes Schneider
mfg
Johannes Schneider
MfG Jörg Luger
Ortwin Glück
2004-11-01 08:09:11 UTC
Permalink
Post by Joerg Luger
Dabei tritt das erste Problem
auf. Die Passwörter sollen nach dem Logout auch wieder aus dem Speicher
gelöscht werden. Soweit ich nun mitbekommen habe, sind String nicht
veränderlich. Man kann nur die Referenz auf das Objekt löschen und dann
hoffen, dass der gc seine Arbeit tut. Das ist zwar unschön aber noch
hinnehmbar.
Aus diesem Grund verwendet man für Passwörter keine String Objekte
sondern char-Arrays. JAAS macht das beispielsweise so. Die kann man nach
Gebrauch nämlich einfach mit 0 überschreiben.
Post by Joerg Luger
Ein größeres Problem ist, dass ich auch One-Time Passwörter
möchte. Und damit ist dann mein schöner Plan hinfällig.
Was du damit meinst, weiss ich nicht genau.
Post by Joerg Luger
Hat jeman ein
Mehtode parat, wie ich die Passwörter möglichst sicher mit Java auf dem
Server speichern kann.
Verwende eine symmetrische Verschlüsselung. Z.B. 3DES, AES o.ä. Den
Schlüssel generierst du aus dem Login-Passwort.

Login-Passwort => Schlüssel => Email-Passwort + 3DES => verschlüsseltes
Passwort
Post by Joerg Luger
Ich möchte dabei keinen Applikation Server sondern
nur einen Servlet-Container wie Tomcat verwenden müsen.
Das ist nicht so wichtig.

Loading...