Изменение значения соли при изменении пароля пользователя?

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

Ответы

Ответ 1

Вы должны изменить соль. Соль разработана как уникальная (как можно больше) для всех экземпляров паролей.

Если вы используете ту же соль для старого и нового пароля, тогда злоумышленник, который видит старый хешированный пароль, и новый хешированный пароль могут атаковать как для стоимости, которая меньше, чем в два раза превышает стоимость атаки. Это именно то, что соль была разработана, чтобы избежать (и соль не имеет другого использования, чем это).

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

Ответ 2

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

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

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

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