Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Sichere Abfrage Passwort Client -> Server (https://www.delphipraxis.net/186647-sichere-abfrage-passwort-client-server.html)

Martin W 19. Sep 2015 11:40


Sichere Abfrage Passwort Client -> Server
 
Hi,

ich möchte für den Login mit Hilfe eines Benutzernamens + Passwort einer Client/ Serveranwendung ein möglichst hohes Maß an Sicherheit erreichen. Alternative Methoden, z.B. mit Zertifikaten, seien hier außen vor gelassen.

Als Idee habe ich folgende Möglichkeit ermittelt:

Passwort speichern
  • Password wird durch den Nutzer auf dem Client eingegeben
  • Password wird auf dem Client mit Hilfe von BCrypt + Random Salt [Salt-1] in "Hash" umgewandelt
  • Hash wird durch den Client an den Server übertragen.
  • Server führt erneut BCrypt aus, jedoch mit dem gleichen Salt [Salt-1] und speichert das Pwd in Datenbank

User authentifizieren
  • Password wird durch den Nutzer auf dem Client eingegeben
  • Client fragt beim Server nach dem Salt [Salt-1] des Users sowie einem Zufallswert
  • Password wird zweifach auf dem Client mit Hilfe von BCrypt + Salt [Salt-1] umgewandelt (= ergibt selben Wert wie in Server-DB)
  • Ergebnis wird mit Zufallswert kombiniert und erneut mit BCrypt + zufälligem Salt [Salt-2] umgewandelt
  • Hash wird durch den Client an den Server übertragen.
  • Server führt erneut BCrypt mit neuem Salt [Salt-2] mit dem Wert seiner Datenbank + Zufallswert aus, vergleicht Ergebnis mit Anfrage durch Client.

Habe ich etwas übersehen?

Viele Grüße

Martin W 19. Sep 2015 11:55

AW: Sichere Abfrage Passwort Client -> Server
 
Vorteile:
  • Passwort liegt nie im Klartext auf dem Server
  • Passwort wird nie im Klartext übertragen
  • Durch den Zufallswert Schutz vor Replay-Attacken
  • Wird die Datenbank öffentlich, verhindert die Tatsache, dass das Passwort auf dem Server nochmals mit BCrypt behandelt wurde, ein Nutzen der Anmeldedaten

Mögliche Schwachstellen:
  • Gelingt es einem Angreifer, sowohl den Datenverkehr der initialen Speicherung als auch einer Authentifizierung abzuhören, kann ein Angreifer daraus ein gültiges Anmeldepasswort errechnen (Kennt jemand dafür einen Lösungsansatz, außer DH oder Transportverschlüsselung?)

nuclearping 19. Sep 2015 11:59

AW: Sichere Abfrage Passwort Client -> Server
 
Wenn du sowieso mit "Hashes" arbeitest, warum nicht gleich einfach MD5 oder SHA1 nehmen? So überträgst du auch nie das Passwort im Klartext und es liegt auch nie im Klartext auf dem Server.

Martin W 19. Sep 2015 12:05

AW: Sichere Abfrage Passwort Client -> Server
 
Zitat:

Zitat von nuclearping (Beitrag 1316326)
Wenn du sowieso mit "Hashes" arbeitest, warum nicht gleich einfach MD5 oder SHA1 nehmen? So überträgst du auch nie das Passwort im Klartext und es liegt auch nie im Klartext auf dem Server.

Da Bcrypt mir einen höheren Sicherheitsstandard bietet.

https://de.wikipedia.org/wiki/Bcrypt

Sicher, es wäre möglich das ganze vorher noch mal mit Sha256 / Sha512 zu hashen, aber daraus ergibt sich imho kein wirklicher Gewinn.

(Zumal: Bitte heutzutage nicht mehr Passwörter einfach nur als MD5 speichern.. Wenn es etwas aus der SHA Familie sein soll, dann bitte Salted SHA256+)

nuclearping 19. Sep 2015 12:17

AW: Sichere Abfrage Passwort Client -> Server
 
MD5 und SHA1 sind AFAIK immernoch ungeknackt. Daher ist "höherer Sicherheitsstandard" in dem Fall relativ. Ob du nun was sicheres mit was sicherem vergleichst, es kommt aufs selbe raus.
Ob das aber den erhöhten Mehraufwand (und damit auch wieder Fehleranfälligkeit) einer komplexeren Implementation rechtfertigt, sollte man abklären.

Wenn du Attacken durch Trafficmitschnitte befürchtest, dann hilft dir meiner Meinung nach auch kein noch so ausgeklügelter Algorithmus. Dann ist im Vorfeld schon was schiefgelaufen, wenn der Angreifer an eine Stelle kommt, wo er deinen (oder den Server-)Traffic loggen kann.
MD5 / SHA1 bieten zwar keinen Schutz gegen simple Replay-Attacken, aber wenn du vorher einen Salt beim Server abfragst, wird das ein findiger Angreifer auch rausfinden.

Vielleicht kann man hier auch was mit RSA machen?

r2c2 19. Sep 2015 13:36

AW: Sichere Abfrage Passwort Client -> Server
 
Mal was zum Nachdenken: http://www.christian-rehn.de/2012/06...machen-sollte/

Verwende SSL. Alles andere ist Spielkram. Und den Vorschlag md5 für Passwörter zu verwenden, hab ich mal geflissentlich überhört.

nuclearping 19. Sep 2015 15:59

AW: Sichere Abfrage Passwort Client -> Server
 
Zitat:

Zitat von r2c2 (Beitrag 1316337)
Und den Vorschlag md5 für Passwörter zu verwenden, hab ich mal geflissentlich überhört.

Weil ...?

jfheins 19. Sep 2015 16:49

AW: Sichere Abfrage Passwort Client -> Server
 
Zitat:

Zitat von nuclearping (Beitrag 1316342)
Weil ...?

man im Jahre 2015 den Term MD5 am besten vergisst. ERST RECHT, wenn es um Sicherheit geht. Oder klarer: Die Verwendung von MD5 und das Ziel "hohes Maß an Sicherheit" sind quasi gegenteilig.
Einziger Verwendungszweck (mit gutem Gewissen) ist m.E. sowas wie Datei-Duplikate finden bzw. in ner Datenbank speichern. Für Passwörter ist von SHA-1 inzwischen auch abzuraten.

Das BSI sagt zu Hashfunktionen::
Zitat:

Für einen Einsatzzeitraum nach Ende 2015 wird empfohlen, SHA-256, SHA-384, SHA-512 oder SHA-512/256 zu verwenden.

nuclearping 19. Sep 2015 18:27

AW: Sichere Abfrage Passwort Client -> Server
 
Die einzig mir bekannte Möglichkeit, um MD5 (oder ähnliches) zu "knacken", ist über Dictionaries oder Bruteforce. Das Problem hat aber jedes System.

Ich will hier keine Diskussion anfangen und zu konservativ klingen. Aber wenn man sagt, MD5 / SHA1 wäre unsicherer als SHA-256 oder ähnliches, impliziert das doch, dass es praktische und zeitnahe Wege und Möglichkeiten gibt, es zu knacken. Oder nicht? Was ist an MD5 unsicherer als an SHA-256, wenn es bis dato (selbst 2015) noch keinem gelungen ist, MD5 (ohne Dictionary) zu reversen?

vagtler 19. Sep 2015 18:34

AW: Sichere Abfrage Passwort Client -> Server
 
Zitat:

Zitat von nuclearping (Beitrag 1316349)
[...] Was ist an MD5 unsicherer als an SHA-256, wenn es bis dato (selbst 2015) noch keinem gelungen ist, MD5 (ohne Dictionary) zu reversen?

Weil es in üblichen Angriffsszenarien wie Anmeldung normalerweise ausreicht, in endlicher Zeit eine Kollision zu finden.

blawen 19. Sep 2015 20:27

AW: Sichere Abfrage Passwort Client -> Server
 
Zitat:

Zitat von vagtler (Beitrag 1316350)
Zitat:

Zitat von nuclearping (Beitrag 1316349)
[...] Was ist an MD5 unsicherer als an SHA-256, wenn es bis dato (selbst 2015) noch keinem gelungen ist, MD5 (ohne Dictionary) zu reversen?

Weil es in üblichen Angriffsszenarien wie Anmeldung normalerweise ausreicht, in endlicher Zeit eine Kollision zu finden.

Üblicherweise endet "endlich" nach 3 Fehlversuchen...

Martin W 19. Sep 2015 21:35

AW: Sichere Abfrage Passwort Client -> Server
 
Zitat:

Zitat von blawen (Beitrag 1316358)
Zitat:

Zitat von vagtler (Beitrag 1316350)
Zitat:

Zitat von nuclearping (Beitrag 1316349)
[...] Was ist an MD5 unsicherer als an SHA-256, wenn es bis dato (selbst 2015) noch keinem gelungen ist, MD5 (ohne Dictionary) zu reversen?

Weil es in üblichen Angriffsszenarien wie Anmeldung normalerweise ausreicht, in endlicher Zeit eine Kollision zu finden.

Üblicherweise endet "endlich" nach 3 Fehlversuchen...


Das mag sein - Anwendungen sollten jedoch so entwickelt werden, dass Daten, insbesondere bei einem Diebstahl, umfassend geschützt sind. Insbesondere wenn es um Passwörter geht, sollte man erwarten können, dass Kundendaten an dieser Stelle bestmöglich geschützt werden. Hier sind insbesondere Anwendungsentwickler in der Pflicht, den aktuellen Stand der Technik zu implementieren.

Der typische Anwender verwendet nicht selten ein Passwort für alle Programme & Services - hier wäre es fatal ein Passwort nur mit MD5 zum hashen. Rainbox-Tables gibt es für MD5 wie Sand am Meer.

Stand der Technik - das sollte Diskussionsgrundlagen sein - ist definitiv nicht mehr MD5 oder SHA1. Auch der Einsatz von zufälligen Salts ist wichtig, denn Usergenerierte Passwörter sind meistens schwach und ähneln sich nicht selten.

Algorithmen wie SHA oder MD5 werden als Standard genutzt, weil sie vor allem eins sind - schnell! Schnell bedeutet aber auch eine gewisse Anfälligkeit gegenüber verschiedenen Arten von Brute-Force Techniken. BCrypt geht den entgegengesetzten Ansatz - der Rechenaufwand ist um einiges höher als bei gängigen Hash-Technologien.

Zurück zum Thema: Wenn ich Anwendungen entwickle, entwerfe ich vor allem sicherheitskritische Teile stets auf Basis eines mehrschichtigen Ansatzes. Rund herum werden zahlreiche andere Techniken eingesetzt, angefangen bei TLS (nicht SSL) für den Transportweg, signierter & verschlüsselter Payload bis hin zu zahlreichen anderen standardisierten Möglichkeiten, Anwendungkommunikation abzusichern. Trotz allem sollte auch die "Klartext-Schicht" bereits "sicher" sein, also einen hohen Sicherheitsstandard bieten.

Dass es keinen Sinn macht, eigene Kryptosysteme zu entwerfen steht außer Frage. Aus diesem Grunde verwende ich nur Technologien, die bereits standardisiert sind. BCrypt ist nichts neues, Salts sind nichts neues, und der Challange-Response-Ansatz ist auch nicht neu.

Aber zum Schluss ist mir ein Statement wichtig: Im Fokus stehen Programmierer, Entwickler. Diese sind dafür verantwortlich, stets einen hohen Standard beim Datenschutz anzulegen. Es sollte in der heutigen Welt selbstverständlich sein, Daten und Informationen ausnahmelos nach dem aktuellen Stand der Technik abzusichern - gerade bei sensiblen Informationen wie Passwörtern.

Sir Rufo 19. Sep 2015 22:48

AW: Sichere Abfrage Passwort Client -> Server
 
Theorie ist grau und so sieht die Realität aus
http://www.heise.de/newsticker/meldu...e-2811149.html

Martin W 20. Sep 2015 10:52

AW: Sichere Abfrage Passwort Client -> Server
 
Zitat:

Zitat von Sir Rufo (Beitrag 1316364)
Theorie ist grau und so sieht die Realität aus
http://www.heise.de/newsticker/meldu...e-2811149.html

Deswegen bcrypt ;) Zurück zum Thema, jemand noch Ideen für den Loginablauf? Wie macht ihr es denn normalerweise bei Client-Server-Logins?

Dejan Vu 21. Sep 2015 06:59

AW: Sichere Abfrage Passwort Client -> Server
 
Wie kommt der Server an [Salt 1]? Imho müsste der Client dies bei der erstmaligen Generierung des Hash mit übertragen, d.h. der Server speichert das Tupel [Hash, Salt1].

Dann funktioniert der Rest auch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz