LINUX.ORG.RU

Как захешировать пароль?

 , ,


0

1

Надо захешировать пароль std::string. В данный момент использую openssl-md5. Но есть клиент со встроенным сервером для тестирования, хочу убрать в нём зависимость от openssl. Вроде есть boost::sha1. Но я не нашёл пример его использования. Другие библотеки подключать нежелательно, потому что напрямую сложные хеш-функции, кроме хеширования пароля, больше нигде не используются.



Последнее исправление: user08 (всего исправлений: 1)

Зачем пример? Глянь в либе прототип.

l4gfcm ★★
()

MD5 устарел, он уязвим. Его для checksum использовать надо, а не для паролей.

Для паролей используй PBKDF2. https://en.wikipedia.org/wiki/List_of_PBKDF2_implementations

Зачем убирать зависимость от OpenSSL? Он везде есть. На крайний случай, линкуйся с ним статически.

Сам криптографию не переизобретай ни в коем случае.

lovesan ★★★
()
Ответ на: комментарий от andreyu

Как нужно понимать эту фразу?

Я имею в виду, что пользователь отправляет на сервер не пароль, а только его хеш.

user08
() автор топика
Ответ на: комментарий от lovesan

MD5 устарел, он уязвим. Его для checksum использовать надо, а не для паролей.

Для паролей используй PBKDF2. https://en.wikipedia.org/wiki/List_of_PBKDF2_implementations

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

user08
() автор топика
Ответ на: комментарий от user08

Я имею в виду, что пользователь отправляет на сервер не пароль, а только его хеш.

Как это следует из «Надо захешировать пароль std::string»?

andreyu ★★★★★
()
Ответ на: комментарий от lovesan

На крайний случай, линкуйся с ним статически.

Если базовая система обновляется, то безопаснее так не делать

annulen ★★★★★
()
Ответ на: комментарий от user08

А хэш захешировать еще раз не хочешь?

Deleted
()
Ответ на: комментарий от rumgot

Пользователь как раз должен отправлять пароль, а вот на сервере должен хранися его хэш.

Почему? Я сразу на клиенте хэширую.

user08
() автор топика
Ответ на: комментарий от user08

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

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Интересно. Я понимал, что в таком случае доступ получен. Но почему-то думал что важнее минимизировать возможность узнать именно пароль, и лучше его даже не отправлять. Значит на сервер клиент обычно отправляет полный пароль? А как насчёт хеширования на клиенте, а потом ещё и на сервере?

user08
() автор топика
Последнее исправление: user08 (всего исправлений: 1)
Ответ на: комментарий от user08

По поводу дополнительного хэширования не знаю, насколько это надежно. А вот по поводу безопасности передачи пароля могу сказать, что передавать нужно внутри ssl-соединения, на boost::asio это можно делать, но внутри boost::asio использует OpenSSL, поэтому без него ничего не получится.

rumgot ★★★★★
()
Ответ на: комментарий от user08

монопенисно. И то и другое норм. Товарищ майор за овер2000 лет не сможет подобрать (если только терморектальным криптоанализом). Так что бери, что удобнее.

anonymous
()

Если так сделаю, нормально будет?...

Генерируется соль. На клиенте хэшируется с этой солью и какой-то постоянной солью клиента. Дальше хэш отправляется на сервер и он хэшируется с этой же сгенерированной солью и постоянной солью сервера.

user08
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.