Хранение осуществляется хеширование


Согласно документу PHP, соли bcrypt состоят из

" $2a$", двухзначный параметр стоимости, " $ "и 22 цифры из алфавита"./0-9A-Za-z "

Таким образом, если я использую функцию crypt() для хэширования своих паролей, то в результирующий вывод входят первые 7 символов ($2a$10$, Если 10 - параметр стоимости) в составе соли-и, согласно всем примерам, которые я смог найти в интернете, этот полный вывод записывается в БД.

Интересно, в чем смысл? в хранении этих первых символов вместе с остальной солью и зашифрованными данными. Их смысл мне совершенно ясен, но я не могу понять, почему такая информация должна быть написана вместе с остальной частью хэша. Не являются ли они "просто" информацией об алгоритме и адаптивной стоимости вычислений? Так в чем же преимущество хранения такой информации, связанной с приложением? И (даже если это может показаться ребячеством) зачем раскрывать их злоумышленнику, который в конечном итоге может захватить мою базу данных?

1 2

1 ответ:

Причина в том, как работает крипта. Он разработан таким образом, что вы можете сделать следующее

if ($hashedPassword == crypt($rawPassword, $hashedPassword)) {
    //Verified
}
Таким образом, сохраняя все, вам не нужно каждый раз заново создавать строку соли... И смысл соли не должен быть секретом. На самом деле, это не должно быть секретом. Он предназначен для того, чтобы сорвать радужные таблицы. помните, если они могут захватить вашу базу данных, велики шансы, что они могут получить и другие вещи, так что положить соль в другом месте на самом деле не даст вам много. Кроме того, соль не очень-то поможет. BCrypt рассчитан на жесткий процессор, что означает, что грубое принуждение (даже при знании соли) нецелесообразно. Вот почему у вас есть параметрcost . Так что не беспокойтесь о том, чтобы "спрятать" соль. Просто храните его рядом с паролем, и все будет в порядке... Не говоря уже о том, что произойдет, если в будущем вы захотите изменить свой алгоритм? Например, предположим, что вы хотите увеличить параметр стоимости за счет лучшего оборудования смонтированный. Если вы не сохраните эту информацию вместе с паролем, все сохраненные пароли станут недействительными. Таким образом, каждый сохраненный пароль содержит всю информацию, необходимую для его проверки. Таким образом, вы можете проверить правильность входа в систему, если хэш является текущим значением по умолчанию, а если нет, то переписать и обновить базу данных с новым. Это предотвращает проблемы, связанные с обновлением и улучшением методов хэширования...