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.