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:

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

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:

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:

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

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:

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: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
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

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:

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

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:

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

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:

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

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
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

In einem LAN könnte man auch IPSec oder gleich IPv6 + zugehörige Sicherheitstechnik einsetzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Was aktuelles: http://www.heise.de/newsticker/meldung/99318
Auch der Einsatz von Verschlüsselung hilft bei Nachlässigkeit des Anwenders nicht unbedingt weiter. So berichtet das Teamfurry-Blog von einem Exit-Node in Deutschland, der offenbar versucht, sich per Man-in-the-Middle-Attacke in SSL-Verbindungen einzuschleichen. Dazu lieferte er bei über ihn laufende SSL-Verbindungen ein gefälschtes, respektive selbstunterschriebenes Zertifikat aus. Das produziert zwar in der Regel eine Fehlermeldung, oftmals ignorieren Anwender diese jedoch.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Y0Gi hat geschrieben:Was aktuelles: http://www.heise.de/newsticker/meldung/99318
Auch der Einsatz von Verschlüsselung hilft bei Nachlässigkeit des Anwenders nicht unbedingt weiter. So berichtet das Teamfurry-Blog von einem Exit-Node in Deutschland, der offenbar versucht, sich per Man-in-the-Middle-Attacke in SSL-Verbindungen einzuschleichen. Dazu lieferte er bei über ihn laufende SSL-Verbindungen ein gefälschtes, respektive selbstunterschriebenes Zertifikat aus. Das produziert zwar in der Regel eine Fehlermeldung, oftmals ignorieren Anwender diese jedoch.
Falls du das gerne selber mal ausprobieren willst, ettercap kann das ;) Wobei das in Deutschland jetzt wohl ein verbotenes Terroristenwerkzeug ist.
[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

Jop, ettercap gutmütig zu umschreiben ist schon nicht ganz einfach ;) Zu Telnet-Zeiten gab's dafür Juggernaut.
Bodyslam
User
Beiträge: 14
Registriert: Montag 1. Juli 2013, 10:41

Hallo Zusammen,

ich bin gerade dabei mich zu informieren zum Thema sicherer Login. Nun ist das Thema ja ziemlich groß und ich denke an eine gute Umsetzung per https. Ist es denn mit https nun tatsächlich so einfach Daten sicher zu übertragen? Wenn die Daten so oder so verschlüssel übertragen werden, dann könnte man (was ich nie machen würde) PW auch im Klartext übertragen.Https nimmt einem durch seine hauseigene Verschlüsselung doch ziemlich viel Programmierarbeit ab.

Nachdem ich hier im Forum schon einiges gelesen habe, würde ich ohne https ein Login gar nicht gestalten, da der Aufwand einer sicheren Übertragung ohne viel zu groß ist, daher meine Frage: würde es mit der Verschlüsselung durch https ausreichen, ein Login (cookies und sessions obligatorisch) so zu gestalten, dass der Hashwert des PW zusammen mit dem Namen übertragen wird?

MfK
B.
BlackJack

@Bodyslam: Ob Du nun ein Passwort oder dessen Hashwert überträgst ist eigentlich egal, denn wenn der Server immer nur den Hashwert bekommt, dann ist das aus seiner Sicht ein Passwort, also überträgst Du wieder ein Passwort. HTTPS ist so sicher wie die Zertifikate die dafür verwendet werden und ob der Anwender aufpasst, dass auch das richtige Zertifikat verwendet wird. Also beim 08/15-Anwender ist das nicht sicher. Aber für viele Sachen halt sicher genug.
Antworten