Согласно документу PHP, соль bcrypt состоит из
«$ 2a $», двухзначный параметр стоимости, «$» и 22 цифры из алфавита «./0-9A-Za-z»
Итак, если я использую функцию crypt () для хеширования своих паролей, итоговый вывод включает в себя первые 7 символов ($ 2a $ 10 $, если 10 – параметр стоимости) как часть соли – и, согласно всем примерам i смог найти через Интернет, этот полный вывод записывается в db.
Мне интересно, в чем смысл хранить эти первые символы с остальной солью и зашифрованными данными. Их смысл полностью ясен для меня, но я не могу понять, почему такая информация должна быть написана вместе с остальной частью хэша. Разве это не «просто» информация об алгоритме и адаптивной стоимости вычислений? Итак, какова польза в хранении такой информации, связанной с приложением? И (даже если это может показаться ребяческим), почему они раскрывают их злоумышленнику, который может в конечном итоге захватить мою базу данных?
Причина в том, что работает склеп. Он разработан так, что вы можете сделать следующее
if ($hashedPassword == crypt($rawPassword, $hashedPassword)) { //Verified }
Поэтому, сохраняя все, вам не нужно каждый раз воссоздавать сольную строку …
И точка соли не должна быть секретной. На самом деле это не значит быть тайным. Это предназначено для фольклорных столов. помните, что если они могут захватить вашу базу данных, шансы высоки, они могут получить и другие вещи, поэтому размещение соли в другом месте на самом деле не даст вам многого.
Кроме того, соль не поможет. BCrypt предназначен для CPU-Hard, что означает, что грубое форсирование (даже зная соль) нецелесообразно. Вот почему у вас есть параметр стоимости . Поэтому не беспокойтесь о «сокрытии» соли. Просто сохраните его рядом с паролем, и все будет хорошо …
Не говоря уже о том, что произойдет, если в будущем вы захотите настроить свой алгоритм? Например, предположим, вы хотите увеличить параметр стоимости из-за лучшего оборудования, которое будет установлено. Если вы не сохранили эту информацию с паролем, все ваши сохраненные пароли станут недействительными. Таким образом, каждый сохраненный пароль имеет всю информацию, необходимую для его проверки. Таким образом, вы можете проверить действующий логин, если хеш является текущим значением по умолчанию, а если не перефразировать и обновить базу данных новым. Он предотвращает проблемы, связанные с обновлением и улучшением методов хэширования …