Я наткнулся на дискуссию, в которой я узнал, что то, что я делал, на самом деле не засовывало пароли, а начинали их, и с тех пор я начал делать обе функции:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
Игнорирование выбранного алгоритма хеширования (я хочу, чтобы это обсуждение солей и перцев, а не конкретные алгоритмы, но я использую безопасный), является ли это безопасным вариантом или я должен делать что-то другое? Для тех, кто не знаком с условиями:
-
A salt - это случайное сгенерированное значение, обычно сохраняемое со строкой в базе данных, предназначенное для невозможности использования хеш-таблиц для взлома паролей. Поскольку у каждого пароля есть своя соль, все они должны быть подвергнуты грубой принудительной индивидуальности, чтобы взломать их; однако, поскольку соль хранится в базе данных с помощью хэша паролей, компрометация базы данных означает потерю обоих.
-
A pepper - это статическое значение на всей территории, хранящееся отдельно от базы данных (обычно жестко закодированное в исходном коде приложения), которое должно быть секретным. Он используется так, чтобы компромисс базы данных не приводил к тому, что вся таблица паролей приложений была бы грубой силой.
Есть ли что-нибудь, чего я не вижу, и засовывает и переполняет мои пароли лучшим вариантом для защиты моей безопасности пользователя? Существует ли какой-либо потенциальный недостаток безопасности для этого?
Примечание. Предположим, что в целях обсуждения, что приложение и база данных хранятся на отдельных компьютерах, не распространяются пароли и т.д., поэтому нарушение сервера базы данных автоматически не означает нарушение сервера приложений.