Frage:
Wie kann ein System eine Mindestanzahl geänderter Zeichen in Kennwörtern erzwingen, ohne alte Kennwörter im Klartext zu speichern oder zu verarbeiten?
Iszi
2011-04-19 18:19:42 UTC
view on stackexchange narkive permalink

In einigen Umgebungen müssen Benutzer jedes Mal, wenn sie ein neues Kennwort erstellen, eine bestimmte Anzahl von Zeichen ändern. Dies dient natürlich dazu, zu verhindern, dass Kennwörter leicht zu erraten sind, insbesondere wenn alte Kennwörter bekannt sind, die ein verstorbener Mitarbeiter möglicherweise für ein gemeinsam genutztes Dienstkonto hat.

Ich habe separate Fragen offen, um die Seite dieser Durchsetzung auf Knopfdruck anzusprechen. Ich bin jedoch auch gespannt, wie diese Durchsetzung im Backend funktioniert. Wenn ein Klartextkennwort nicht von einem starken Hashing-Algorithmus abgeleitet werden kann, wie ermittelt das System, wie viele Zeichen in neuen Kennwörtern geändert wurden?

Man könnte die Hashes "ähnlicher" Passwörter generieren und speichern oder einen solchen Algorithmus für den neuen Pass ausführen und prüfen, ob der alte Pass ähnlich ist. Wahrscheinlicher ist, dass sie die letzten n Passwörter speichern und überprüfen, ob der Hash mit keinem von ihnen übereinstimmt
In Bezug auf das Speichern der alten Hashes: http://security.stackexchange.com/questions/19458/requiring-regular-password-change-but-storing-previous-paswords
Sechs antworten:
#1
+48
Mark Davidson
2011-05-26 16:11:06 UTC
view on stackexchange narkive permalink

Ich bin mir nicht sicher, ob ich mit allen Passwörtern vergleichen soll, die der Benutzer zuvor verwendet hat, da dies wirklich von dem von Ihnen verwendeten Hashing-System abhängt. Ich würde sagen, wenn es möglich ist, Ähnlichkeiten aus dem Hash abzuleiten, ist es nicht sehr gut System zunächst.

Unter der Annahme, dass der Benutzer beim Festlegen seines neuen Kennworts sein aktuelles Kennwort angeben muss, können Sie zumindest das neue Kennwort mit dem aktuellen Kennwort vergleichen, da Sie beide als nicht verwaschen haben dieser Punkt.

Das Modul pam_cracklib unter Linux überprüft Kennwörter wie dieses und führt standardmäßig einige grundlegende Überprüfungen durch.

  • Ist das neue Passwort nur das alte Passwort mit umgekehrten Buchstaben ("Passwort" vs. "Drowssap") oder gedreht ("Passwort" vs. "Asswordp")?
  • Unterscheidet sich das neue Passwort nur aufgrund einer Änderung der Groß- / Kleinschreibung ("Passwort" vs. "Passwort") vom alten?
  • Ist mindestens eine Mindestanzahl von Zeichen im neuen Passwort nicht vorhanden das alte Passwort? Hier kommt der Parameter "difok" ins Spiel.

Weitere Details dazu finden Sie hier.

Das ist eine gute Methode, die in der realen Welt tatsächlich angewendet wird. Ein Kennwortverlaufs- / Komplexitäts-Enforcer kann auch eine beliebige Anzahl historischer Kennwörter überprüfen, indem er Varianten und Ableitungen hasht, wenn ein Benutzer das Kennwort zum ersten Mal festlegt, und diese speichert, um sie später zu überprüfen.
+1 @Mark & @user502. Das Problem, über das Passwort hinauszugehen, das für mehr als nur einen einfachen Hash-Vergleich (auch geringfügige Änderungen) tiefer in den Verlauf aufgenommen wurde, brachte mich dazu, über die Nützlichkeit davon nachzudenken. Wenn ich nicht das identische Passwort von vor> 1 Generation verwende, wie schwach ist das im Vergleich zu einem völlig neuen Passwort? Meiner Meinung nach ist das Risiko möglicherweise nicht gerechtfertigt, Tonnen von Kombinationen für diesen Test auf einem Telefon zu speichern.
Dies kann durch zweimaliges Ändern des Passworts verhindert werden.
@starblue "_ Ändern des Kennworts zweimal hintereinander._" kann durch Erzwingen einer Mindestzeit zwischen Änderungen verhindert werden. (Etwas, das ich nicht empfehle.)
Grundsätzlich könnte das System zum Zeitpunkt der Kennwortänderung das alte Kennwort (das Sie beim Ändern Ihres Kennworts eingeben müssen) für einen späteren Vergleich im Klartext speichern. Dies wäre jedoch wahrscheinlich eine sehr dumme Sache; Ein Angreifer, der den Verlauf der Kennwortauswahl eines Benutzers sehen kann, kann wahrscheinlich das System des Benutzers zum Generieren von Kennwörtern ermitteln und, falls dies nicht zufällig ist, zukünftige Auswahlmöglichkeiten vorhersagen.
"Aber vorausgesetzt, der Benutzer muss sein aktuelles Passwort angeben, wenn er sein neues Passwort festlegt", was falsch ist, wenn der Benutzer ein vergessenes Passwort zurücksetzt.
#2
+28
frankodwyer
2011-04-19 18:28:35 UTC
view on stackexchange narkive permalink

Dies ist bei einer Kennwortänderung einfach möglich (wobei der Benutzer aufgefordert wird, sowohl das alte als auch das neue Kennwort anzugeben).

Um dies hinzuzufügen, funktioniert es, das n-te Passwort zu überprüfen, aber nicht das n-1. Mir ist kein System bekannt, das einen Benutzer mit einer Kennwortsequenz "washington1", "newyork2", "washington3", "newyork4", "washington5", "newyork6" abfangen würde
Bruno - richtig, dafür müsstest du wohl anfangen, Klartext-Passwörter zu speichern (was keine gute Idee ist).
#3
+8
Gilles 'SO- stop being evil'
2013-06-04 02:38:42 UTC
view on stackexchange narkive permalink

Wenn Sie Ihr Passwort ändern, müssen Sie normalerweise zuerst das alte Passwort eingeben. Dies ist aus Sicherheitsgründen nützlich, um sicherzustellen, dass jemand, der an Ihrem Computer vorbeigeht, das Kennwort nicht sehr schnell ändern und Sie sperren kann, während Sie sich umdrehen. Außerdem kann der Server Regeln für die Kennwortentfernung durchsetzen. Der Server muss das alte Kennwort nur so lange im Speicher behalten, bis sichergestellt ist, dass sich das neue Kennwort ausreichend vom alten unterscheidet. Das nicht verwaschene Passwort muss nie gespeichert werden.

Solche Regeln zum Ändern von Passwörtern sind übrigens aus Sicherheitsgründen schlecht. (Ja, ich weiß, dass Sie hier das Opfer sind.) Wenn Benutzer ihr Passwort häufig ändern müssen, wählen sie entweder ein Passwort, das sehr leicht zu merken ist, oder notieren es an einem leicht zugänglichen Ort. Der Ablauf des Kennworts hat wenig Vorteile, und der erwartete Verlust an Kennwortstärke, der dadurch entsteht, dass Benutzer ihr Kennwort alle paar Monate ändern, gleicht diese Vorteile mehr als aus. Eine ausführlichere Beschreibung des Ablaufs von Kennwörtern finden Sie unter Wie erhöht das Ändern Ihres Kennworts alle 90 Tage die Sicherheit? und Erzwingen Sie, dass Benutzer Kennwörter ändern müssen? und Regelmäßige Kennwortänderung erforderlich, aber vorherige Kennwörter speichern?

Danke für deine Antwort! Ich habe völlig vergessen, das vorhandene Passwort erneut eingeben zu müssen, bevor ich es ändere, und es im Speicher zu speichern, bis es Sinn macht. Dank der beiden Links werde ich sicher einen Blick darauf werfen.
#4
+5
Jacco
2011-05-26 17:41:45 UTC
view on stackexchange narkive permalink

Der Benutzer sollte sowohl ein altes als auch ein neues Passwort für eine Passwortänderung eingeben. Der Vergleich des neuen Passworts mit dem alten Passwort ist daher problemlos möglich, da die Klartextversion vom Benutzer angegeben wird.

Zum Vergleichen des neuen Passworts mit früheren Passwörtern (außer dem aktuellen) kann nur eine Überprüfung durchgeführt werden erfolgt durch Vergleichen der Hash-Ergebnisse. Jede Methode, die einen anderen Vergleich ermöglichen würde, wäre eine Sicherheitslücke.

#5
+5
Ori
2011-05-31 05:08:53 UTC
view on stackexchange narkive permalink

Dies kann nur durch Beibehalten von Hashes erfolgen, es kann sogar über mehrere Iterationen erfolgen.

Die Methode besteht darin, das Kennwort zu verwenden und es durch das Hashing-Algo zu iterieren und nach Vergleichen mit den gespeicherten Werten zu suchen.

Zum Beispiel lieben es die meisten Benutzer (und Service Desk-Leute) Ein Fallback als letztes Mittel mit wütend-wichtigen Typen) wird ihre Passwörter unglaublich einfach wiederholen.

Nehmen Sie also das Passwort: # foob @ r1 und machen Sie es zu # foob @ r2, das Sie wahrscheinlich sehen werden kann ohne Kenntnis von # foob @ r1 getestet werden, indem schnell eine Brute Force auf den Algo ausgeübt wird. Mit moderner Rechenleistung können Sie die ersten 4 Zeichen in weniger als zehn Sekunden durchlaufen.

Aus Effizienzgründen sind die letzten vier normalerweise diejenigen, die sich ändern, sodass Sie dort wahrscheinlich einen größeren Knall für Ihr Geld sehen werden. Wenn Sie nicht aufeinanderfolgend und aufeinanderfolgend arbeiten, müssen Sie auf den Endbenutzer und einen großen Teil des Prozessors ziemlich lange warten.

#6
+5
Gilles 'SO- stop being evil'
2013-06-04 05:09:14 UTC
view on stackexchange narkive permalink

Wenn Sie Ihr Passwort ändern, müssen Sie normalerweise zuerst das alte Passwort eingeben. Dies ist aus Sicherheitsgründen nützlich, um sicherzustellen, dass jemand, der an Ihrem Computer vorbeigeht, das Kennwort nicht sehr schnell ändern und Sie sperren kann, während Sie sich umdrehen. Außerdem kann der Server Regeln für die Kennwortentfernung durchsetzen. Der Server muss das alte Kennwort nur so lange im Speicher behalten, bis sichergestellt ist, dass sich das neue Kennwort ausreichend vom alten unterscheidet. Das nicht gehashte Kennwort muss nie gespeichert werden und kann den alten Hash löschen, sobald das neue Kennwort gespeichert wurde.

Wenn der Server die Gleichheit mit älteren Kennwörtern überprüft, nicht nur mit dem letzten, ist dies anders Geschichte. Es ist einfach genug, die Wiederverwendung von Passwörtern mit alten Hashes zu überprüfen: Berechnen Sie für jeden alten Hash den Hash des neuen Passworts mit dem alten Salt und vergleichen Sie ihn mit dem alten Hashwert. Auf einem ordnungsgemäß konfigurierten System sollte dies einige Sekunden dauern.

Anders verhält es sich, wenn der Server die Ähnlichkeit mit älteren Kennwörtern überprüft und nicht nur die Gleichheit mit älteren Kennwörtern sowie die Ähnlichkeit mit dem vorherigen. Wenn der Server die richtigen Hashes verwendet, muss er Variationen des neuen Passworts versuchen und jede Variation mit allen alten Salzen hashen. Dies kann bei einer nicht zu vernachlässigenden Anzahl von Variationen Minuten oder länger dauern. Wenn sich der Server über die Ähnlichkeit mit einem älteren Kennwort beschwert, bin ich vorsichtig, dass möglicherweise falsch gehashte Kennwörter gespeichert werden.

Es gibt einen anderen Ansatz für die Ähnlichkeit, bei dem der Hash jedes Kennworts gespeichert wird Variation, jeweils unabhängig gesalzen, sobald das Passwort festgelegt ist. Aber das bringt Ihnen nicht viel: Der Server muss immer noch den Hash des neuen Passworts mit all diesen Salzen berechnen, was immer noch lange dauert, zu lange für eine typische Passwortänderung.

Eine Möglichkeit, alte Kennwörter wiederherzustellen, die tatsächlich funktionieren, die ich jedoch noch nie irgendwo gesehen habe, besteht darin, bei einer Kennwortänderung Folgendes zu tun, nachdem der Benutzer zur Eingabe des alten Kennworts aufgefordert und das alte Kennwort aus dem Speicher gelöscht wurde:

  • Leiten Sie einen symmetrischen Schlüssel aus dem neuen Kennwort ab (mithilfe eines Algorithmus zur Schlüsselverstärkung).
  • Leiten Sie einen Schlüssel auf die gleiche Weise aus dem alten Kennwort ab.
  • Entschlüsseln Sie die Liste der alten Kennwörter mit dem alten Schlüssel.
  • Hängen Sie das frühere Kennwort an die Liste an.
  • Führen Sie die Richtlinienprüfungen durch - alle vorherigen Kennwörter sind zu diesem Zeitpunkt bekannt. Wenn das neue Passwort die Prüfungen besteht ...
  • Verschlüsseln Sie die Liste der alten Passwörter mit dem neuen Schlüssel.
  • Ändern Sie das Passwort und die verschlüsselte Liste der vorherigen Passwörter in der Datenbank.

Dies ist etwas riskant, da bei einer Gefährdung des aktuellen Kennworts auch alle vorherigen Kennwörter angezeigt werden. Es ist jedoch möglich, mit angemessenem Rechenaufwand eine Kennwortentfernungsrichtlinie für eine beliebige Anzahl vorheriger Kennwörter durchzusetzen.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...