При хранении паролей было сказано, что Salt не обязательно должен быть секретным, и его единственная цель — сохранить уникальность всего хэша. Также сказано, что ограничение длины пароля не является хорошей практикой, но рассмотрим следующий пример:
Перед хешированием мы убеждаемся, что версия обычного текста всегда содержит 128 символов, обрезая пользовательский ввод до максимум 100, а затем добавляя дополнительные символы в качестве соли.
Таким образом, если пользователь вводит 20 символов, мы добавляем 108 случайных символов в качестве соли. Если пользователь вводит 100, мы добавляем 28 и так далее. Дело в том, что длина текстовой версии должна быть 128 символов. В коде это может выглядеть так:
$salt = generate_salt($pass); // length varies as explained above
$hash = hash('sha512', $pass.$salt);
Таким образом, наш «простой текст» перед хешем всегда будет состоять из 128 символов.
Мы храним $hash на сервере A и храним $salt на сервере B.
Теперь давайте предположим, что злоумышленник получает доступ к базе данных хэшей (сервер A) и ему удается реверсировать хэши. Для него это выглядит хорошо, но текстовая версия (или перевернутые хэши), которую он видит, по-прежнему выглядит как хэши, поскольку содержит 128 символов. Поскольку он не знает соли, он никогда не узнает исходный пароль.
В качестве дополнительной проблемы, из-за того, что SHA512 производит 128 символов, он также никогда не будет уверен, что он уже получил текстовую версию, поскольку (как уже упоминалось) текстовая версия выглядит как хэши. На первый взгляд он может подумать, что это итерированная версия, если это так, он, вероятно, будет продолжать итерацию, возможно, до бесконечности.
Есть ли какие-либо проблемы с этим подходом, поскольку в случае реверсирования хэша сохранение секретности соли обеспечивает дополнительную безопасность, а сохранение одинаковой длины простого текста, возможно, добавляет уровень запутывания?
Примечание. Это, конечно, предполагает, что ваше приложение имеет несколько неудачных попыток обнаружения/предотвращения входа в систему.