Определите, использовался ли ранее пароль при реализации случайных солей

Я пытаюсь реализовать более сильный механизм хеширования и хранения паролей и выбираю самый простой подход, PHP password_hash () а также password_verify ().

Я позволяю PHP генерировать случайную соль в соответствии с рекомендациями, и все это имеет смысл. За исключением того, что часть политики «надежного пароля», которую я должен реализовать, состоит в том, чтобы запретить пользователю повторно использовать ранее использованный пароль. Теоретически я мог бы реализовать это, храня архив хешированных паролей. Когда пользователь меняет свой пароль, мы сверяем новый хеш с архивом хешей. Если есть совпадение, мы знаем, что пароль ранее использовался, и отклоняем его. Однако реализация случайной соли, будучи значительно более безопасной, эффективно делает этот архив хэшей паролей бесполезным.

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

1

Решение

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

Чтобы проверить хеш с солью, вам нужен и хеш, и его соль, они должны быть сохранены вместе. password_hash() Функция будет включать соль в результирующее хеш-значение, поэтому вам не нужно заботиться о хранении соли самостоятельно.

$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
|  |  |                     |
|  |  |                     hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
|  |  |
|  |  salt = nOUIs5kJ7naTuTFkBy1veu (22 characters)
|  |
|  cost-factor = 10 = 2^10 iterations
|
hash-algorithm = 2y = BCrypt

password_verify() Функция также будет поддерживать старые форматы хэшей, если они были созданы с помощью crypt() функция, это потому, что хранятся и другие параметры, такие как алгоритм. Это делает функцию будущим / прошлым.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru