Сравните два BCRYPT-пароля для одного источника

Я использую BCRYPT для хэширования паролей наших пользователей в базе данных, и поскольку соединение с клиентом не всегда может быть безопасным, я хочу воздержаться от отправки его на сервер в виде простого текста при аутентификации. Мы используем реализацию Java / Spring BCRYPT.

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

Спасибо за ваши предложения.

2 ответа

Ты не можешь

BCrypt - это односторонняя функция. Вы можете запустить bcrypt("password") дважды и оба раза вы получите разные результаты, и нет никакого способа узнать, что эти два хэша предназначены для одного и того же пароля.

Это функция безопасности, а не ошибка.

Вместо того, чтобы пытаться использовать этот подход, вместо этого вам следует сосредоточиться на защите канала связи с помощью реализации SSL и, возможно, HSTS.

Вам нужно будет настроить шифрование с открытым / закрытым ключом через RSA, как это используется в SSL. Концепция такова: у сервера есть открытый ключ, который может запросить любой клиент. Клиент использует этот открытый ключ для шифрования информации перед ее отправкой на сервер. Сервер использует свой закрытый ключ для дешифрования информации (а затем повторно зашифровывает ее с помощью вашей хэш-функции bcrypt).

RSA разработан для упрощения этой парадигмы: информация может быть свободно зашифрована с помощью открытого ключа, но открытый ключ не способен расшифровать. Только закрытый ключ может быть использован для расшифровки.

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

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