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