Должен ли я зашифровать свой пароль после его хеширования? Если да, то как правильно это сделать?

Я пытаюсь лучше понять Хеширование и Шифрование, однако наткнулся на вопросы, которые, похоже, не могу найти в Google, потому что Google продолжает предлагать принципиальную разницу Хеширования и Шифрования, которую я уже прочитал.

Более того, многие люди спрашивают в Stackru, которые не имеют ни малейшего представления о разнице между шифрованием и хэшированием, и достигают вершины поисковой системы SO. Который не отвечает на мои вопросы, и не помог мне. Поэтому я хотел убедиться в хэшировании пароля и его шифровании.

Теперь предположим, что я хочу защитить нового зарегистрированного пользователя..

  1. Мне нужно сначала отфильтровать это. (Пропущено из-за не связанных)
  2. После того, как я получил "безопасную" форму пароля, я ее хеширую.

    $safePassword; // Already filled with safe password. $hash = password_hash($safePassword,PASSWORD_ARGON2I);

  3. Затем вставьте его в базу данных.

Теперь здесь возникают вопросы.

  1. Нужно ли мне шифровать хешированный пароль?

  2. Если да, то как мне безопасно зашифровать пароль? (Я собираюсь использовать AES)

AES_ENCRYPT(str, key_str);

куда str это строка, которую мы хотели зашифровать и key_str это ключ шифрования

Другой вопрос возникает

  1. Как мне сохранить key_str безопасно, так что я могу использовать его для дальнейшего использования (для аутентификации)?

2 ответа

Решение

Вам не нужно зашифровывать пароль, просто запустите его через хэш пароля, как вы включили в свой вопрос, это прекрасно. Хеширование является односторонней операцией, поэтому "невозможно" изменить хеш и получить исходный пароль.

Шифрование паролей после их хеширования не делает вещи менее безопасными, просто они также не делают вещи более безопасными. Это также создает больше проблем - где хранить ключ?

Придерживайтесь только Argon2, ничего дальше не нужно.

Теперь предположим, что я хочу защитить нового зарегистрированного пользователя..

  1. Мне нужно сначала отфильтровать это. (Пропущено из-за не связанных)

Если под "фильтром" вы подразумеваете как-то изменить этот пароль.... нет! Мало того, что вам не нужно этого делать, вы на самом деле вызываете головную боль в будущем и снижаете безопасность пароля.

Теперь здесь возникают вопросы.

  1. Нужно ли мне шифровать хешированный пароль?

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

Зашифровав этот хэш, вы ничего не получите.

Другой вопрос возникает

  1. Как сохранить key_str в безопасности, чтобы я мог использовать его для дальнейшего использования (для аутентификации)?

На самом деле это ключевая причина, по которой шифрование бесполезно. Чтобы использовать его, вам нужно будет расшифровать его, что означает, что ключи должны храниться в одном месте с хеш-данными.

Другие вопросы по тегам