Вопрос с собеседования · System design

Чем bcrypt и argon2 принципиально отличаются от SHA-256 применительно к хранению паролей?

MiddleБезопасность приложения
Ещё спрашивают так:
  • Почему SHA-256 не подходит для паролей?
  • Чем argon2 лучше bcrypt?
Коротко

SHA-256 быстрый — это хорошо для контрольных сумм и плохо для паролей: утёкшую базу перебирают миллиардами вариантов в секунду. bcrypt, scrypt и argon2 намеренно медленные и настраиваются параметром стоимости.

  • argon2id ещё и требует много памяти — мешает перебору на видеокартах
  • Соль — случайная на каждый пароль, хранится рядом с хешем
  • Пароли хешируют, а не шифруют: восстанавливать их не нужно

А ещё Параметры повышают со временем и перехешируют при входе

Подробно

Зачем медленная функция. После утечки базы атакующий перебирает словари и варианты паролей, вычисляя хеш для каждого. SHA-256 на видеокарте — миллиарды вычислений в секунду: короткие и словарные пароли находятся за минуты. Функции для паролей (KDF) специально делают одно вычисление дорогим — десятки–сотни миллисекунд. Для легитимного входа это незаметно, для перебора — замедление в миллионы раз.

Различия функций:

  • bcrypt — параметр cost (каждая единица удваивает время), проверен временем, обрезает пароль до 72 байт;
  • scrypt — стоимость по памяти и времени;
  • argon2id — победитель конкурса Password Hashing Competition, настраиваются память, итерации и параллелизм; память делает перебор на GPU и ASIC дорогим. Текущая рекомендация OWASP;
  • PBKDF2 — если нужна сертификация FIPS, с большим числом итераций.

Соль — уникальная случайная строка на каждый пароль. Одинаковые пароли дают разные хеши, радужные таблицы бесполезны, перебор идёт по каждому пользователю отдельно. Все перечисленные функции включают соль и параметры в выходную строку.

Не шифрование: зашифрованный пароль расшифровывается ключом, который лежит рядом — утечка ключа раскрывает все пароли.

Что хотят услышать

  • Ключевое: намеренная стоимость, а не длина хеша.
  • Особенности bcrypt и argon2, память как защита от GPU.
  • Роль соли.
  • Хеширование вместо шифрования.

Частые ошибки

  • «SHA-256 с солью достаточно».
  • Глобальная соль на всех пользователей.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Они намеренно медленные и настраиваемые по стоимости, что удорожает перебор
  • ✗Они дают более длинный хеш, который труднее подобрать
  • ✗Они устойчивы к радужным таблицам сами по себе и потому не требуют хранить соль
  • ✗Они шифруют пароль, и его можно расшифровать при необходимости

Что спросят дальше

  • Что делать с сохранёнными хешами при повышении параметра стоимости?
  • Почему сообщение об ошибке входа не должно различать неверный логин и неверный пароль?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования