Я использую PHPass для хэширования своих паролей в течение длительного времени. Я признаю, что все еще есть вещи, которые я не совсем понимаю (или игнорирую), чтобы правильно хешировать пароль, поэтому сегодня я просматривал всю информацию, которую я мог найти об этом.
Пересматривая документы PHPass, я сделал следующее:
Помимо фактического хэширования, phpass прозрачно генерирует случайные соли, когда новый пароль или кодовая фраза хэшируется, и он кодирует хэш-тип, соль и счетчик растяжения пароля в строку «хэш-кодировку», которую он возвращает. Когда phpass аутентифицирует пароль или кодовую фразу против сохраненного хеша, он также прозрачно извлекает и использует идентификатор хеш-типа, соль и счетчик итераций из «строки кодирования хэша». Таким образом, вам не нужно беспокоиться о соле и растягивании самостоятельно – phpass заботится о них для вас.
Я смело вынесла предложение, которое беспокоило меня.
Я всегда, хотя соль должна быть несколько секретной, в том смысле, что она не должна быть известна злоумышленнику. Поэтому, если правильно понимать, PHPass сохраняет соль, используемую в том же хэше, чтобы она могла использовать ее при сравнении паролей и проверки правильности.
Мои вопросы:
Цель соли – не секрет. Цель состоит в том, чтобы добавить уникальный компонент к каждому входу хэширования, поэтому идентичные пароли не будут хешировать к идентичным хэшам, тем самым делая процесс грубой силы более сложным и трудоемким, поскольку каждый хэш должен быть проверен индивидуально.
Да, было бы немного более безопасно, если бы соль была секретной, но на практике это трудно реализовать, так как ваша заявка также нуждается в соли, поэтому ее нужно хранить где-нибудь там, где доступен пароль. Поэтому на практике, когда злоумышленник получает хэш пароля, он, как правило, также может получить соль в любом случае.
Немного фона
Соль не должна быть секретной, вместо этого соль «работает», убедившись, что хэш-результат уникален для каждого использованного экземпляра. Это делается путем выбора другого значения случайной соли для каждого вычисленного хэша.
Намерение соли не скомпрометировано, когда оно известно; злоумышленнику все равно необходимо атаковать каждый хэш отдельно. Поэтому вы можете просто сохранить соль вместе с паролем.
Итак, безопасен ли PHPass?
ДА! PHPass (в соответствии с лучшими практиками) генерирует для вас сильную случайную соль. Это хорошо изученная и качественная библиотека.
Интересные ссылки :
Как безопасно использовать хэш-пароли?
Как хранить соль?
Пароль Хейшинг добавляет соль + перец или достаточно соли?
Солярное поколение и программное обеспечение с открытым исходным кодом
Если я правильно понимаю, соли в первую очередь используются, чтобы помешать заранее вычисленным атакам хэшей / радужных таблиц. Пока хеш, который используется, генерируется так, что он достаточно глобально уникален (не жестко закодирован в PHPass, например), вы в порядке.