Открыть сервис

Парольные хеши

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

История

Ранние методы хранения паролей

В первых компьютерных системах, например, в 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 →