Muss Salz zufällig sein, um einen Passwort-Hash zu sichern?

8

Ich weiß sehr wenig über Sicherheit (ich muss eine grundlegende Erklärung der Grundlagen finden) und versuche, eine vernünftige Möglichkeit zu finden, Benutzerkennwörter in einer Datenbank mit .Net zu speichern.

Hier ist meine aktuelle Lösung:

%Vor%

Ich speichere die Ergebnisse von HashPassword () in der Datenbank. Um das Passwort eines Benutzers zu überprüfen, mache ich folgendes:

%Vor%

Meine Frage ist, ob das Salz zufällig sein und in der DB gespeichert werden soll oder ob ich ein 10-Byte-Salz erzeugen und es in meinem Code speichern könnte und immer dasselbe Salz verwende, um mich beim Speichern des Salzes zu sparen DB und nur den Schlüssel speichern?

Auch wenn jemand andere Probleme mit dem, was ich mache, sehe, würde ich mich über jeden Rat freuen.

    
C.J. 08.02.2012, 14:54
quelle

2 Antworten

29
  

Meine Frage ist, ob das Salz zufällig sein und in der DB gespeichert werden soll oder ob ich ein 10-Byte-Salz erzeugen und es in meinem Code speichern könnte und immer dasselbe Salz verwende, um mich beim Speichern des Salzes zu sparen DB und nur den Schlüssel speichern?

ABSOLUT NICHT.

Sie verstehen überhaupt nicht den Sinn des Salzes, wenn Sie diese Frage überhaupt stellen.

Der Zweck des Saltes ist es, es einem Angreifer willkürlich zu erschweren, eine vorberechnete Tabelle mit Hash-allgemeinen Passwörtern zu verwenden. Wenn das Salz immer gleich ist, berechnet der Angreifer nur eine Tabelle mit Hash-allgemeinen Kennwörtern mit diesem Salz vor.

Lass mich das deutlicher machen. Nehmen wir an, ein Angreifer hat Ihre Passwort-Datenbank erhalten und macht einen Angriff gegen alle gespeicherten Hashes, um herauszufinden, welches Passwort dem Hash entspricht. Wenn jedes Salz anders ist, muss der Angreifer einen frischen Angriff gegen jeden Eintrag in der Datenbank einleiten. Wenn jedes Salz dasselbe ist, greift ein Benutzer an, greift jeden Benutzer an.

Außerdem: Angenommen, Sie verwenden für jeden Benutzer dasselbe Salz. Angenommen, zwei Benutzer haben das gleiche Passwort. Und angenommen, der Angreifer hat die Passwortdatenbank erhalten. Der Angreifer weiß jetzt, welche zwei Benutzer das gleiche Passwort haben , da sie den gleichen gesalzenen Hash haben und vernünftigerweise annehmen können, dass das schwächste Passwort in der Datenbank ist . Der Angreifer kann seine Bemühungen (egal welche) auf den Angriff auf diesen Benutzer konzentrieren. Und wenn sie das Passwort dieses Benutzers kennt, ist die Wahrscheinlichkeit gut, dass der Benutzer diesen Benutzernamen und sein schwaches Passwort auf anderen Systemen verwendet hat, was der Angreifer jetzt kompromittieren kann, ohne sein Passwort zu haben Dateien.

Es ist gut, dass Sie etwas über Sicherheit lernen wollen; Es ist schlimm, dass Sie versuchen, ein echtes Passwort-System mit Ihrem Verständnis zu schreiben. Wenn dies für ein echtes System ist, das echte Benutzer schützen muss, verwenden Sie ein von Experten erstelltes System oder stellen Sie Ihren eigenen Experten ein . Sie werden ein System erstellen, das Sie nicht brechen kann, kein System, das ein Angreifer nicht brechen kann.

Außerdem: Sie fragen Fremde im Internet nach Hilfe bei der Sicherheit . Fremde, von denen du keine Ahnung hast, ob sie wissen, worüber sie reden oder einfach nur Sachen machen. Holen Sie sich einen echten Sicherheitsexperten (und das ist nicht ich - ich bin ein Experte für semantische Analysatoren). Der Aufbau eines Sicherheitssystems ist eine der schwierigsten Programmieraufgaben, die es gibt. Sie brauchen professionelle Hilfe.

Eine Einführung in grundlegende Passwort-Authentifizierungsschemata finden Sie in meiner Artikelserie:

Ссылка

    
Eric Lippert 08.02.2012, 15:10
quelle
1

Sie müssen kein zufälliges Salz anwenden, aber wenn Sie Ihre Kennwörter tun, sind sie ein bisschen sicherer. Offensichtlich müssen Sie, wenn Sie eine zufällige Salzen anwenden, diese mit dem Hash-Passwort in der Datenbank speichern, so dass Sie gegen ein angegebenes Passwort überprüfen können.

Eine schnelle Google ergab diesen Beitrag , der Ihnen vielleicht weiterhelfen kann.

    
Matt Roberts 08.02.2012 14:58
quelle

Tags und Links