Перейти к содержимому
ecdsa.com

Хеширование паролей

Хранение пароля в виде результата намеренно медленной функции с солью, желательно требовательной к памяти (memory-hard), например Argon2id, scrypt, bcrypt или PBKDF2, чтобы украденная база данных была устойчива к офлайн-подбору.
Другие написанияArgon2idbcryptscryptPBKDF2password hash

Быстрый хеш, например SHA-256, позволяет атакующим проверять на GPU миллиарды вариантов в секунду. Функции хеширования паролей добавляют уникальную случайную соль для каждого пароля (она делает бесполезными заранее вычисленные таблицы) и настраиваемую стоимость вычисления. OWASP в Password Storage Cheat Sheet рекомендует, в порядке предпочтения: Argon2id (RFC 9106) с объёмом памяти не менее 19 МиБ, 2 итерациями и параллелизмом 1; scrypt с N = 2¹⁷, r = 8, p = 1; bcrypt с коэффициентом стоимости (work factor) 10 или больше (он обрезает входные данные до 72 байт); а там, где требуется FIPS 140, — PBKDF2-HMAC-SHA256 с числом итераций не менее 600 000.

Храните алгоритм и параметры вместе с хешем (строковый формат PHC $argon2id$v=19$m=19456,t=2,p=1$…, у bcrypt — $2b$10$…), чтобы позже можно было повысить стоимость, а старые хеши обновить при следующем входе. Необязательный перец (pepper) — секрет, который хранится вне базы данных, — добавляет защиту на случай, если утечёт только база данных.

NIST SP 800-63B-4 требует хранения с солью и повышенной вычислительной стоимостью, а для паролей, которые служат единственным фактором аутентификации, ещё и минимальной длины 15 символов. Ключи доступа полностью избавляют от хранимого секрета: сервер хранит только открытый ключ.

Стандарты и ссылки

Все термины