Парольные хеши
Парольные хеши — это результат применения криптографической хеш-функции к паролю пользователя, сохраняемый в базе данных системы аутентификации вместо самого пароля в открытом виде. Основная цель использования парольных хешей — защита учётных записей в случае компрометации базы данных: злоумышленник, получивший доступ к хешам, не может напрямую узнать исходные пароли, так как хеш-функция является односторонней (необратимой). Парольные хеши являются ключевым элементом современных систем безопасности, применяемых в операционных системах, веб-приложениях, базах данных и сетевых протоколах.
История
Ранние методы хранения паролей
В первых компьютерных системах, например, в Multics (1960-е годы), пароли хранились в открытом виде. С ростом числа пользователей и угроз безопасности возникла необходимость в их защите. Одним из первых решений стало шифрование паролей, однако оно требовало хранения ключа, что создавало дополнительную уязвимость.
Внедрение хеширования
В 1970-х годах в операционной системе Unix был реализован метод хеширования паролей с использованием алгоритма DES (Data Encryption Standard). Пароль преобразовывался в 13-символьную строку, хранящуюся в файле /etc/passwd. Однако DES имел ограничение по длине пароля (8 символов) и был уязвим для атак перебором. Позднее, в 1980-х, появились более стойкие алгоритмы, такие как MD5 (Message Digest 5), который начал применяться в системах FreeBSD и Linux.
Современные стандарты
С 2000-х годов парольные хеши стали обязательным требованием для большинства веб-сервисов и приложений. В 2010-х годах отказ от MD5 и SHA-1 в пользу более медленных и устойчивых к атакам алгоритмов, таких как bcrypt, scrypt и Argon2, стал стандартом безопасности. В 2015 году Argon2 был признан победителем конкурса Password Hashing Competition (PHC) и рекомендован как основной алгоритм для хеширования паролей.
Принципы работы
Хеш-функции
Парольные хеши создаются с помощью криптографических хеш-функций, которые преобразуют входные данные (пароль) в строку фиксированной длины — хеш-значение. Основные свойства таких функций:
- Односторонность: по хешу невозможно восстановить исходный пароль за разумное время.
- Детерминированность: одинаковый пароль всегда даёт одинаковый хеш.
- Лавинный эффект: малейшее изменение пароля приводит к полностью другому хешу.
- Устойчивость к коллизиям: два разных пароля не должны давать одинаковый хеш (на практике это гарантируется для современных алгоритмов).
Соль
Для предотвращения атак по радужным таблицам (предварительно вычисленным хешам для распространённых паролей) к каждому паролю перед хешированием добавляется случайная строка — соль (salt). Соль хранится вместе с хешем и уникальна для каждого пользователя. Это делает атаку неэффективной, так как злоумышленнику пришлось бы вычислять хеши для каждого пароля отдельно.
Итерации
Современные алгоритмы (например, bcrypt, PBKDF2, Argon2) используют многократное повторение хеш-функции (итерации) для замедления перебора. Чем больше итераций, тем выше вычислительная стоимость атаки, что затрудняет подбор пароля даже при использовании специализированного оборудования (GPU, ASIC).
Классификация алгоритмов
Устаревшие и нерекомендуемые
- DES: использовался в ранних Unix-системах, длина пароля ограничена 8 символами, уязвим для перебора.
- MD5: быстрый алгоритм, подвержен коллизиям и атакам перебором (например, с помощью GPU).
- SHA-1: устарел после обнаружения коллизий в 2017 году (атака SHAttered).
- SHA-256/SHA-512: устойчивы к коллизиям, но слишком быстры для парольного хеширования без итераций (например, в Linux до 2019 года использовался SHA-512 с 5000 итераций, что считается слабой защитой).
Рекомендуемые современные алгоритмы
- bcrypt: основан на алгоритме Blowfish, использует соль и регулируемое число итераций (стоимость). Устойчив к атакам на GPU благодаря высокой памяти. Широко применяется в веб-фреймворках (Ruby on Rails, Django).
- PBKDF2: стандартизирован NIST, использует соль и итерации. Поддерживает различные хеш-функции (например, HMAC-SHA256). Применяется в системах шифрования (WPA2, Android, iOS).
- scrypt: разработан для устойчивости к атакам на ASIC и GPU за счёт требований к памяти (memory-hard). Используется в криптовалютах (Litecoin) и некоторых веб-сервисах.
- Argon2: победитель PHC (2015), имеет три варианта (Argon2d, Argon2i, Argon2id). Argon2id рекомендуется как универсальный выбор. Используется в современных системах (например, в PHP 7.2+, в качестве стандарта в OpenBSD).
Специализированные алгоритмы
- LM Hash: устаревший алгоритм Windows (до NT 4.0), разбивает пароль на части по 7 символов, что делает его крайне нестойким.
- NTLM: более современный алгоритм Windows (начиная с Windows NT), использует MD4. Уязвим для атак перебором, но всё ещё применяется в старых системах.
- SHA-512crypt: используется в Linux (в файле
/etc/shadow), включает соль и 5000 итераций (по умолчанию), но считается менее стойким, чем bcrypt или Argon2.
Применение
Операционные системы
- Linux: парольные хеши хранятся в файле
/etc/shadow(доступен только суперпользователю). Формат:$id$salt$hash, гдеidуказывает на алгоритм (например,$6$для SHA-512crypt,$y$для yescrypt). - Windows: начиная с Windows NT, используются хеши NTLM (в реестре
SAM). Современные версии (Windows 10/11) поддерживают также bcrypt и PBKDF2 для дополнительной защиты. - macOS: использует PBKDF2 для хранения паролей в системе FileVault и для аутентификации пользователей.
Веб-приложения
Большинство современных веб-фреймворков (Django, Ruby on Rails, Laravel, Spring Security) по умолчанию используют bcrypt или Argon2 для хеширования паролей. Например, в PHP функция password_hash() с алгоритмом PASSWORD_BCRYPT или PASSWORD_ARGON2ID является стандартом.
Сетевые протоколы
- HTTP Basic Authentication: в ранних реализациях пароли передавались в открытом виде, в современных — хешируются на стороне сервера.
- Kerberos: использует хеши паролей для генерации ключей аутентификации.
- SSH: пароли хешируются перед хранением на сервере (обычно с помощью bcrypt или SHA-512).
Угрозы и атаки
Атаки перебором
- Брутфорс: последовательный перебор всех возможных паролей. Защита — использование медленных алгоритмов и длинных паролей.
- Словарные атаки: перебор по списку распространённых паролей (например, RockYou). Защита — соль и политика сложности паролей.
- Радужные таблицы: предварительно вычисленные хеши для большого набора паролей. Защита — соль, делающая таблицы бесполезными.
Атаки на алгоритмы
- Коллизии: для устаревших алгоритмов (MD5, SHA-1) возможна подмена пароля, дающего тот же хеш. Современные алгоритмы (SHA-256, SHA-3) устойчивы к коллизиям.
- Атаки на реализацию: ошибки в коде (например, утечка соли в логах, использование одинаковой соли для всех пользователей) могут свести на нет защиту.
Социальная инженерия
Злоумышленники могут получить пароль напрямую от пользователя (фишинг, подглядывание), что делает хеширование бесполезным. Поэтому парольные хеши — лишь один из элементов комплексной системы безопасности.
Критика и ограничения
Недостатки хеширования
- Необратимость: пароль нельзя восстановить, что создаёт проблемы при смене системы или восстановлении доступа (требуется сброс пароля).
- Зависимость от качества пароля: слабые пароли (например, «123456») могут быть подобраны даже с использованием медленных алгоритмов.
- Ресурсоёмкость: медленные алгоритмы (bcrypt, Argon2) требуют значительных вычислительных ресурсов на сервере, что может снижать производительность при большом числе пользователей.
Альтернативы
- Многофакторная аутентификация (MFA): дополняет пароль одноразовыми кодами или биометрией.
- Zero-knowledge proof (доказательство с нулевым разглашением): позволяет аутентифицироваться без передачи пароля или хеша (например, протокол SRP).
- Passkeys (ключи доступа): используют асимметричную криптографию вместо паролей.
Будущее парольных хешей
С развитием квантовых вычислений и увеличением вычислительной мощности классических компьютеров существующие алгоритмы могут стать уязвимыми. Исследования в области постквантовой криптографии направлены на создание хеш-функций, устойчивых к атакам с использованием квантовых компьютеров (например, алгоритмы на основе решёток). Однако на практике рекомендации по выбору алгоритмов (bcrypt, Argon2) остаются актуальными на 2025 год.
Источники
- NIST Special Publication 800-63B: Digital Identity Guidelines — Authentication and Lifecycle Management.
- Password Hashing Competition (PHC) — Final Report, 2015.
- Официальная документация OpenBSD по Argon2.
- RFC 2898 — PKCS #5: Password-Based Cryptography Specification (PBKDF2).
- Руководство по безопасности веб-приложений OWASP (Password Storage Cheat Sheet).
- Стандарт IEEE 1619-2018 — Cryptographic Protection of Data on Block-Oriented Storage Devices.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →