BCrypt обновляет библиотеку и ее содержимое - не сломает ли мой логин?

У меня есть старое устаревшее приложение, использующее Spring Security (3.1.0) для реализации BCrypt. Хеши имеют некоторый формат, например

$2a$10$Cas1.FrwwQ3...WqS1i31gHrk12J9YK

Для реализации кодера:

PasswordEncoder BCRYPT = new BCryptPasswordEncoder(BCRYP_ITERATIONS);

используется для создания хеша (для хранения в базе данных) и для сопоставления.

Мои вопросы:

  1. Если я просто поменяю BCRYP_ITERATIONS с 10 до 18 это сломает мой логин?
    Из того, как я понимаю BCrypt, этого не произойдет - что касается сопоставления, он будет просто использовать значение итерации, которое хранится внутри самого хэша ($2a$10$). А для создания новых хешей для хранения в базе данных используется новое значение.

  2. Если я обновляю библиотеку до последней реализации, которая использует новую версию ($2b$) BCryprt - это сломает мой логин?
    Поскольку это как-то меняет метод, я бы сказал, да - это правда?

2 ответа

Решение

Обновление Spring Security не должно нарушать вашу регистрацию, потому что последний снимок Spring Security 5.2 все еще поддерживает $2a, увидеть BCryptPasswordEncoder:

Реализация PasswordEncoder, которая использует функцию сильного хеширования BCrypt. Клиенты могут по желанию предоставить "версию" ($2a, $2b, $2y) и "силу" (также известные как обход журналов в BCrypt) и экземпляр SecureRandom. Чем больше параметр прочности, тем больше работы (экспоненциально) потребуется для хеширования паролей. Значение по умолчанию 10.

ни один из 18 журналов не нарушит вашу регистрацию, поскольку последний снимок Spring Security 5.2 по-прежнему поддерживает от 4 до 31 журналов, см. BCryptPasswordEncoder:

сила - бревна, от 4 до 31

1: если я просто поменяю BCRYP_ITERATIONS с 10 на 18 - это сломает мой логин? Из того, как я понимаю BCrypt, этого не произойдет - что касается сопоставления, он будет просто использовать значение итерации, хранящееся внутри самого хеша ( $2a$10$). А для создания новых хэшей для хранения в базе данных используется новое значение.

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

2: Если я обновляю библиотеку до последней реализации, которая использует новую версию ($2b$) BCryprt - это нарушит мою регистрацию? Как-то это меняет метод, я бы сказал, да - это правда?

Если вы измените с $2a$ в $2b$ это всего лишь незначительное изменение версии. Это означает, что это просто исправление ошибок или незначительное улучшение безопасности и производительности, чтобы не нарушить функциональность.

Другие вопросы по тегам