Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем