Passwörter übertragen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
JanDMC
User
Beiträge: 95
Registriert: Donnerstag 23. September 2004, 19:35
Kontaktdaten:

Dienstag 13. November 2007, 16:29

Hallo Leute,

Wie übertrag ich am besten Passwörter, die dann in einer DB(SQLite3) gespeichert werden. Ich benutze Sockets. Der Client sendet das Passwort and den Server , der dann in der DB nachguckt ob das richtig ist.

mfg
Jan :D
joa nää python is toll :D
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Montag 19. November 2007, 23:33

Hi,

ich würde empfehlen, niemals Kennworte direkt zu übermitteln. Besser ist es, eine sogenannten kryptografische Hash-Funktion (z.B. MD5 oder SHA1) auf das Kennwort anzuwenden, das Ergebnis zu verschicken und auf der Serverseite das Originalkennwort ebenfalls mit der selben Hash-Funktion zu behandeln und dann die Ergebnisse zu vergleichen.

Die besondere Eigenschaft einer kryptografischen Hash-Funktion ist, dass sie nur in eine Richtung funktioniert, d.h. du kannst zwar einen String S damit zu einem S' machen, aber aus S' nicht wieder zurück auf S schließen.

Es ist auch eine gute Idee, niemals Kennworte im Klartext in einer Datenbank abzulegen - schon um nicht den Datenbank-Administrator in Versuchung zu führen.

Stefan
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Montag 19. November 2007, 23:58

Verwende SSL/TLS ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Dienstag 20. November 2007, 00:17

sma hat geschrieben:ich würde empfehlen, niemals Kennworte direkt zu übermitteln. Besser ist es, eine sogenannten kryptografische Hash-Funktion (z.B. MD5 oder SHA1) auf das Kennwort anzuwenden, das Ergebnis zu verschicken und auf der Serverseite das Originalkennwort ebenfalls mit der selben Hash-Funktion zu behandeln und dann die Ergebnisse zu vergleichen.
Das bringt leider nicht wirklich viel Übertragungssicherheit dazu, da kann jemand der das abhört genau gleich S' an den Serve rschicken und schon ist er authentifiziert.

Gruss
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Dienstag 20. November 2007, 06:15

ich würde dir empfehlen das ganze über https zu machen, dann hast du von Hause aus eine Verschlüsselung oder Clientseitig per Javascript das Passwort verschlüsseln, nur was ist, wenn jemand kein JScript aktiviert hat?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 20. November 2007, 11:11

SchneiderWeisse hat geschrieben:ich würde dir empfehlen das ganze über https zu machen, dann hast du von Hause aus eine Verschlüsselung oder Clientseitig per Javascript das Passwort verschlüsseln, nur was ist, wenn jemand kein JScript aktiviert hat?
Er arbeitet mit Sockets. Daraus schliesse ich mal das weder HTTP noch Javascript verwendet werden. ;)

Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Dienstag 20. November 2007, 11:46

JanDMC hat geschrieben:Wie übertrag ich am besten Passwörter, die dann in einer DB(SQLite3) gespeichert werden. Ich benutze Sockets.
Hallo Jan!

Wenn du nicht die Passwörter, sondern den MD5-Hash in der Datenbank speicherst, dann hast du den Vorteil, dass die realen Passwörter deiner Kunden nicht verloren sind, wenn jemand Zugriff auf deine SQLiteDB bekommt.

Der Server vergleicht dann nur noch den frisch erzeugten MD5-Hash mit dem in der DB gespeicherten MD5-Hash. Beim Verbinden wird weiterhin das Klartextpasswort übertragen. Also könnte dieses immer noch abgehorcht werden.

Aber das kannst du verhindern, indem du den gesamten Datenverkehr verschlüsselst. Also nicht nur die Übertragung der Passwörter, sondern die komplette Verbindung.

Dafür gibt es erprobte Produkte. Z.B. SSH (Portumleitung), PPTP, oder mein Liebling: OpenVPN

Damit bist du auf der sicheren Seite, ohne dass du dich in deinem Programm selber darum kümmern musst.

mfg
Gerold
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 20. November 2007, 12:21

Klar, reine Übertragungen selbst von gehashten Passwörtern sind natürlich noch für Replay-Attacken anfällig. Dies lässt sich durch Challenge-Response-Verfahren umgehen.

Letztlich ist SSL/TLS aber eine bewährte Lösung, die sich ohne das Schreiben einer eigenen Implementierung nutzen lässt.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 20. November 2007, 13:08

Y0Gi hat geschrieben:Klar, reine Übertragungen selbst von gehashten Passwörtern sind natürlich noch für Replay-Attacken anfällig. Dies lässt sich durch Challenge-Response-Verfahren umgehen..
Welches sich dann wieder mit einem "Man in the middle" Angriff aushebeln lässt. :wink:

Zum selber schreiben: Wenn ich sehe wie viele Problem richtig erfahrene Personen beim Design und bei der Implementierung von SSL hatten halte ich das nur in sehr wenigen Fällen für eine gute Idee.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 20. November 2007, 14:07

veers hat geschrieben:
Y0Gi hat geschrieben:Klar, reine Übertragungen selbst von gehashten Passwörtern sind natürlich noch für Replay-Attacken anfällig. Dies lässt sich durch Challenge-Response-Verfahren umgehen..
Welches sich dann wieder mit einem "Man in the middle" Angriff aushebeln lässt. :wink:
Ebenso wie SSL :)
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 20. November 2007, 14:22

Y0Gi hat geschrieben:
veers hat geschrieben:
Y0Gi hat geschrieben:Klar, reine Übertragungen selbst von gehashten Passwörtern sind natürlich noch für Replay-Attacken anfällig. Dies lässt sich durch Challenge-Response-Verfahren umgehen..
Welches sich dann wieder mit einem "Man in the middle" Angriff aushebeln lässt. :wink:
Ebenso wie SSL :)
Zeigst du mir mal wie du eine SSL Verbindung mit Zertifikats Validierung mit einem Man in the Middle aushebelst? :wink:
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 20. November 2007, 14:44

Der Schwachpunkt ist wie so oft der User, der Zertifikate nicht exakt validieren kann oder will. U.a. in der hakin9 war dazu mal ein interessanter Artikel, der sich auf SSL-gesicherte Jabber-Verbindungen bezog.

In diesem Fall wird die Validierung jedoch vorzugsweise automatisch vorgenommen, nehme ich mal stark an. Wenn ich mich recht entsinne, lassen sich allerdings auch Zertifikate unterschieben, die über Kollisionsfindung den selben Fingerprint haben (und andere Daten, doch die müssen dafür auch erstmal überprüft werden).
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 20. November 2007, 15:55

Mit dem Benutzer hast du recht. Aber da lässt sich nicht viel machen.

TLS verwendet afaik SHA1+MD5 für die Signaturen. Da dürfte es schwierig sein einen preimage Angriff auszuführen. Selbst wenn nur MD5 verwendet wird dürfte ein preimage Angriff noch sehr schwierig sein. :wink:
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 20. November 2007, 23:42

Aber nicht unmöglich ;) Letztlich sind hier einige Lösungen genannt worden, die für die Zwecke schon eine gute Basis sind und um Längen besser als unverschlüsselte oder nur gehashte Passwortübermittlung.

Fraglich ist auch die Umgebung des Systems: Begrenztes LAN oder Internet? Bei letzterem kann man auch einen VPN-Tunnel in Erwägung ziehen.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 21. November 2007, 00:06

In einem LAN könnte man auch IPSec oder gleich IPv6 + zugehörige Sicherheitstechnik einsetzen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten