2013-09-11 12 views
1

Из соображений безопасности мне нужно заставить пользователя часто менять свой пароль, и что-то, чего я не хочу, - это пароль, действительно близкий к предыдущему, по очевидным соображениям безопасности.По сравнению с предыдущими паролями

Но по соображениям безопасности я не могу хранить реальный пароль в БД (то есть: мне нужно хэшировать его или любой другой метод). Но я не думаю, что сравнение хэшей поможет.

Есть ли способ сравнить 2 пароля, чтобы узнать, близки ли они друг другу?

Ex: пароль и пароль1 находятся слишком близко друг к другу.

+1

Возможный дубликат [Проверка силы пароля: по сравнению с предыдущими паролями] (http://stackoverflow.com/questions/6236542/password-strength-check-comparing-to-previous-passwords) –

+1

Также по теме: http://security.stackexchange.com/questions/3170/how-can-a-system-enforce-a-minimum-number-of-changed-characters-in-passwords-wi –

ответ

3

В то время, когда пользователь выбирает новый пароль, вы заставляете его/ей вводить свой старый пароль. Это позволяет сравнить новый пароль со старым паролем, не сохраняя старый пароль в виде открытого текста.

1

Когда пользователь регистрируется, вы обычно храните хэш пароля в своей базе данных. Вы сравниваете пароль, введенный в хэш, путем хэширования того, что они набрали, и если полученный хэш совпадает с хешем в базе данных, он принят.

Для сравнения со старыми паролями вы будете делать то же самое. Вы можете сохранить последний пароль (или последние 5, 10 ... x паролей) в базе данных, просто скопировав поле хеш-пароля в old-password1 (переключение каждого пароля на один столбец, если вы хотите, чтобы они не могли повторно использовать его после некоторое количество изменений, old-password1 становится old-password2 и т. д.). Затем, когда они вводят новый пароль, вы можете сравнивать так же, как всегда, но против старых хэшей. Если он соответствует старому хешу, вы отклоняете его сообщением о том, что он не может быть одним из последних X-паролей, которые они использовали.

Вы не храните явные текстовые пароли, и вы можете хранить столько старых хэшей, сколько захотите.

+0

Вы не отвечаете на вопрос, или я не понял, что ты имеешь в виду. – dyesdyes

+0

ОК, извините. Вы правы, что я предложил, чтобы устранить повторное использование предыдущих паролей, но вы также можете использовать эту технику для хранения вариантов последнего пароля. Скажем, что последний пароль был в среду1, и вы хотите предотвратить среду 2, среду 3 и т. Д., Вы можете предсказать общие вариации (числа добавлены в конец, цифры вместо букв L33tSp3 @ k style ...) и сохранить хешированную версию этих общие варианты. Для этого требуется немного дополнительного пространства для хранения, но, безусловно, это выполнимо. –

+0

Это не только этот случай, это был пример. – dyesdyes