Справочник по алгоритмам хеширования паролей
В отличие от обычных криптографических хешей, функции формирования ключей из пароля (password hashing KDF) намеренно медленные и ресурсоёмкие. Они защищают от перебора по словарю и радужным таблицам, заставляя атакующего тратить огромные объёмы памяти и процессорного времени на каждую попытку. Ниже собраны как рекомендованные OWASP современные стандарты, так и исторические схемы для совместимости с уже существующими системами.
Argon2id
RFC 9106 Победитель Password Hashing Competition (2015). Совмещает защиту от атак по сторонним каналам (Argon2i) и от GPU/ASIC-взлома (Argon2d). Рекомендован OWASP как алгоритм по умолчанию. Параметры: память, число итераций, степень параллелизма.
bcrypt
Blowfish Адаптивная хеш-функция на базе шифра Blowfish (Нильс Провос и Дэвид Мазьер). Использует дорогостоящее расширение ключа EksBlowfish, стоимость регулируется параметром cost (логарифм от 2). Стандарт индустрии в Unix и веб-приложениях на протяжении 25 лет.
scrypt
RFC 7914 Функция формирования ключа Колина Персиваля (RFC 7914). Основная идея — требовать большой объём оперативной памяти (N), что делает параллельный перебор на GPU и ASIC экономически невыгодным. Параметры: N (стоимость), r (размер блока), p (степень параллелизма).
PBKDF2
NIST SP 800-132 Password-Based Key Derivation Function 2 (RFC 8018, NIST SP 800-132). Многократно применяет HMAC к паролю и соли. Простой и широко поддерживаемый стандарт, но уступает Argon2id и scrypt в защите от специализированного оборудования. Рекомендуется не менее 600 000 итераций для SHA-256.
SHA-crypt / MD5crypt / apr1 / phpass
Unix / Apache / PHP Семейство схем из /etc/shadow и конфигов веб-серверов. SHA-512crypt ($6$) и SHA-256crypt ($5$) — стандарты glibc, MD5crypt ($1$) — устаревший BSD-формат, Apache MD5 ($apr1$) — формат htpasswd, phpass ($P$) — историческая схема phpBB2 и WordPress. Используйте только для совместимости.
NTLM
Windows Формат хеша пароля Windows (MD4 от UTF-16LE). Используется в протоколах NTLM и NetNTLM для аутентификации в Active Directory и SMB. Не применяйте для хранения новых паролей — MD4 полностью скомпрометирован.
SCRAM-SHA-256
RFC 7677 Salted Challenge Response Authentication Mechanism (RFC 5802, RFC 7677). Хранит SaltedPassword в виде StoredKey = H(ClientKey) и ServerKey = HMAC(SaltedPassword, "Server Key"), что позволяет серверу аутентифицировать клиента без хранения его пароля в открытом виде. Стандарт PostgreSQL и MongoDB.
CRAM-SHA-1
RFC 2195 Challenge-Response Authentication Mechanism (RFC 2195). Простейшая схема аутентификации: сервер посылает случайную строку, клиент отвечает HMAC-SHA-1(password, challenge). Используется в IMAP, POP3 и SMTP SASL.
MySQL authentication
caching_sha2 / native Две схемы аутентификации MySQL. caching_sha2_password (MySQL 8+ по умолчанию) дважды применяет SHA-256 к паролю. mysql_native_password (устаревший) дважды применяет SHA-1 и является стандартом для PHP-приложений до MySQL 8.