Ответ вслух Junior Криптография на практике и JWT спрашивают часто обновлено

Как хранить пароли

Вопрос

Расскажите, как правильно хранить пароли пользователей и почему.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Пароль не храню ни открыто, ни зашифрованным: ключ утечёт вместе с базой. Храню результат медленной функции хеширования, лучше Argon2id, иначе bcrypt или scrypt.

Что должно прозвучать в ответе

  • Не хранить открыто и не шифровать: только односторонний хеш

  • Медленный алгоритм: Argon2id, bcrypt, scrypt, а не SHA-256 и MD5

  • Уникальная соль на пароль, параметры вместе с хешем

  • Перец как дополнительный секрет вне базы

  • Миграция старых хешей при входе, сравнение за постоянное время

Что могут спросить следом

  • Как мигрировать базу с MD5 на Argon2id?
  • Почему не шифровать пароли?

Разбор

Образцовый ответ: «Пароль не храню ни открыто, ни зашифрованным: ключ утечёт вместе с базой. Храню результат медленной функции хеширования, лучше Argon2id, иначе bcrypt или scrypt. Быстрые хеши вроде SHA-256 не подходят: видеокарта проверяет миллиарды вариантов в секунду. У каждого пароля своя случайная соль, она хранится рядом с хешем вместе с параметрами алгоритма. Дополнительно можно использовать перец в KMS. Если в базе старые MD5, оборачиваю их: Argon2id от MD5, а при следующем входе пересчитываю нормально. Проверку делаю функцией библиотеки, она сравнивает за постоянное время».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.