Я пытаюсь лучше понять Хеширование и Шифрование, однако наткнулся на вопросы, которые, похоже, не могу найти в Google, потому что Google продолжает предлагать принципиальную разницу Хеширования и Шифрования, которую я уже прочитал.
Более того, многие люди спрашивают в StackOverflow, которые не имеют ни малейшего представления о разнице между шифрованием и хешированием, и достигают вершины поисковой системы SO. Который не отвечает на мои вопросы, и не помог мне. Поэтому я хотел убедиться в хэшировании пароля и его шифровании.
Теперь предположим, что я хочу защитить нового зарегистрированного пользователя ..
После того, как я получил «безопасную» форму пароля, я ее хеширую.
$safePassword; // Already filled with safe password.
$hash = password_hash($safePassword,PASSWORD_ARGON2I);
Затем вставьте его в базу данных.
Теперь здесь возникают вопросы.
Нужно ли мне шифровать хешированный пароль?
Если так, как мне безопасно зашифровать пароль? (Я собираюсь использовать AES)
AES_ENCRYPT(str, key_str);
куда str
это строка, которую мы хотели зашифровать и key_str
это ключ шифрования.
Другой вопрос возникает
key_str
безопасно, так что я могу использовать его для дальнейшего использования (для аутентификации)?Вы не необходимо зашифровать пароль, просто запустив его через хэш пароля, как вы включили в свой вопрос, это совершенно нормально. Хеширование является односторонней операцией, поэтому «невозможно» изменить хеш и получить исходный пароль.
Шифрование паролей после их хеширования не делает вещи менее безопасными, просто они не делают их более безопасными. Это также создает больше проблем — где хранить ключ?
Придерживайтесь только Argon2, ничего дальше не нужно.
Теперь предположим, что я хочу защитить нового зарегистрированного пользователя ..
- Мне нужно сначала отфильтровать. (Пропущено из-за не связанных)
Если под «фильтром» вы подразумеваете как-то изменить этот пароль …. нет! Мало того, что вам не нужно это делать, вы на самом деле вызываете настоящую головную боль в будущем и снижаете безопасность пароля.
Теперь здесь возникают вопросы.
- Нужно ли мне шифровать хешированный пароль?
Нет. Хеширование — это односторонняя функция. Вы не можете восстановить пароль из его хеша. (Вы мог используйте радужную таблицу, которая фактически представляет собой список паролей, которые приводят к определенным хэшам. Вот что правильная соль помогает предотвратить.)
Зашифровав этот хеш, вы ничего не получите.
Другой вопрос возникает
- Как сохранить key_str в безопасности, чтобы я мог использовать его для дальнейшего использования (для аутентификации)?
На самом деле это ключевая причина, по которой шифрование бесполезно. Чтобы использовать его, вам нужно будет расшифровать его, что означает, что ключи должны храниться в одном месте с хеш-данными.