it-swarm-eu.dev

Wie kann ein System eine Mindestanzahl geänderter Zeichen in Kennwörtern erzwingen, ohne alte Kennwörter im Klartext zu speichern oder zu verarbeiten?

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 getrenntFragen offen, um die Knopfdruckseite dieser Durchsetzung 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?

52
Iszi

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 zunächst kein sehr gutes System mit.

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 beide zu diesem Zeitpunkt als nicht verwaschen gelten.

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

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

Weitere Details dazu finden Sie hier .

47
Mark Davidson

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

27
frankodwyer

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.

Übrigens sind solche Regeln zum Ändern von Passwörtern schlecht für die Sicherheit. (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. Weitere Informationen zum Ablauf des Kennworts finden Sie unter Wie erhöht das Ändern Ihres Kennworts alle 90 Tage die Sicherheit? und Ist es nützlich, Benutzer zum Ändern von Kennwörtern zu zwingen? und Erfordert eine regelmäßige Kennwortänderung, speichert jedoch vorherige Kennwörter?

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 kann daher problemlos durchgeführt werden, da die Klartextversion vom Benutzer angegeben wird.

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

5
Jacco

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. Es muss niemals das nicht gehashte Passwort speichern und kann den alten Hash löschen, sobald es das neue gespeichert hat.

Wenn der Server die Gleichheit mit älteren Passwörtern überprüft, nicht nur mit dem letzten, ist das eine andere 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 ist es, wenn der Server die Ähnlichkeit mit älteren Passwörtern überprüft und nicht nur die Gleichheit mit älteren Passwö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, wäre ich vorsichtig, wenn er möglicherweise falsch gehashte Kennwörter speichert.

Es gibt einen anderen Ansatz für die Ähnlichkeit, bei dem der Hash jeder Kennwortvariante gespeichert wird, die jeweils unabhängig gesalzen ist, sobald das Kennwort festgelegt ist. Aber das kostet Sie 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 auf die gleiche Weise einen Schlüssel aus dem alten Passwort ab.
  • Entschlüsseln Sie die Liste der alten Passwörter mit dem alten Schlüssel.
  • Hängen Sie das frühere Passwort 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 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, eine Kennwortentfernungsrichtlinie mit einem angemessenen Rechenaufwand für eine beliebige Anzahl vorheriger Kennwörter durchzusetzen.

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

Die Methode wäre, das Passwort zu nehmen und es durch das Hashing-Algo zu iterieren und nach Vergleichen mit den gespeicherten Werten zu suchen.

Zum Beispiel werden die meisten Benutzer (und Service Desk-Leute lieben es, als letztes Mittel mit wütend-wichtigen Typen darauf zurückzugreifen) ihre Passwörter unglaublich einfach wiederholen.

Wenn Sie also das Passwort # foob @ r1 nehmen und es zu # foob @ r2 machen, das Sie wahrscheinlich sehen werden, können Sie es ohne Kenntnis von # foob @ r1 testen, indem Sie schnell eine Brute Force auf das Algo ausüben. 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.

5
Ori