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

RFC 2898

RFC 2898 — это запрос комментариев (Request for Comments) Интернет-инженерной целевой группы (IETF), опубликованный в сентябре 2000 года и озаглавленный «PKCS #5: Password-Based Cryptography Specification Version 2.0». Документ определяет стандарт для криптографической защиты паролей, включая методы генерации ключей шифрования и аутентификации на основе пароля. RFC 2898 устаревает предыдущую версию спецификации, PKCS #5 v1.5 (RFC 2898), и является основой для многих современных систем защиты паролей, включая протоколы Wi-Fi (WPA2/WPA3) и шифрование дисков (BitLocker, FileVault).

История и происхождение

Стандарт PKCS (Public-Key Cryptography Standards) был разработан компанией RSA Laboratories в начале 1990-х годов как набор открытых спецификаций для криптографических протоколов. Версия 1.5 PKCS #5 была опубликована в 1993 году и описывала базовый метод шифрования на основе пароля. С развитием вычислительных мощностей и появлением новых атак (например, атак по словарю и перебору) стало очевидно, что первоначальная схема недостаточно устойчива.

В 2000 году IETF приняла RFC 2898, который ввёл принципиально новый механизм — PBKDF2 (Password-Based Key Derivation Function 2). Документ был подготовлен Бертом Калиски (Burt Kaliski) из RSA Laboratories и стал результатом многолетних исследований в области криптографии. RFC 2898 остаётся действующим стандартом по состоянию на 2024 год, хотя его преемник, RFC 8018 (PKCS #5 v2.1), опубликованный в 2017 году, внёс незначительные уточнения.

Основные компоненты

RFC 2898 описывает две ключевые функции: PBKDF1 и PBKDF2. Из них PBKDF2 является основной и наиболее широко используемой.

PBKDF1 (устаревшая)

PBKDF1 — это простая итеративная хеш-функция, которая генерирует ключ фиксированной длины (до 160 бит для SHA-1). Она использует пароль и соль (salt) как входные данные и применяет к ним многократное хеширование (обычно с помощью MD5 или SHA-1). Из-за ограниченной длины выходного ключа и уязвимости к атакам с использованием специализированного оборудования (ASIC, FPGA) PBKDF1 считается устаревшей и не рекомендуется к использованию в новых системах.

PBKDF2 (основная)

PBKDF2 — это функция формирования ключа, которая преобразует пароль в криптографический ключ заданной длины. Её работа основана на применении псевдослучайной функции (PRF), обычно HMAC-SHA256 или HMAC-SHA512, к паролю и соли с многократным повторением (итерациями). Ключевые параметры PBKDF2:

  • Пароль (password) — секретная строка, вводимая пользователем.
  • Соль (salt) — случайная строка, добавляемая к паролю для предотвращения атак по радужным таблицам.
  • Количество итераций (iteration count) — число повторений хеширования. Чем больше итераций, тем выше вычислительная сложность атаки перебором.
  • Длина ключа (dkLen) — требуемая длина выходного ключа в байтах.
  • Псевдослучайная функция (PRF) — обычно HMAC с хеш-функцией (например, SHA-256).

Алгоритм PBKDF2 работает следующим образом: для каждого блока выходного ключа вычисляется HMAC от пароля и соли, затем результат многократно хешируется (итерации). Все блоки объединяются в итоговый ключ.

Криптографическая стойкость

PBKDF2 считается устойчивым к атакам перебором при условии выбора достаточного количества итераций. Однако с развитием вычислительных технологий (GPU, ASIC) его стойкость снижается. В 2010-х годах были предложены альтернативные алгоритмы, такие как bcrypt, scrypt и Argon2, которые требуют значительных объёмов памяти (memory-hard functions), что делает атаки на GPU и ASIC менее эффективными.

RFC 2898 не задаёт жёстких требований к количеству итераций, оставляя это на усмотрение разработчика. Рекомендуемое значение в 2024 году составляет не менее 600 000 итераций для HMAC-SHA256, хотя для критически важных систем (например, шифрование дисков) может требоваться 1–2 миллиона итераций.

Применение

Аутентификация и хранение паролей

PBKDF2 широко используется для хеширования паролей в базах данных. Вместо хранения открытого пароля система хранит результат PBKDF2 (соль и итерации). При входе пользователя пароль повторно обрабатывается, и результат сравнивается с сохранённым. Этот метод применяется в:

  • Операционных системах: Windows (NTLMv2, но с устаревшими параметрами), macOS (FileVault), Linux (LUKS).
  • Веб-серверах: Apache, Nginx, PHP (функция password_hash() с опцией PASSWORD_BCRYPT или PASSWORD_ARGON2I, но PBKDF2 доступен как альтернатива).
  • Базах данных: PostgreSQL, MySQL (через расширения).

Шифрование дисков

PBKDF2 используется в стандартах шифрования дисков, таких как LUKS (Linux Unified Key Setup) и BitLocker (Microsoft). В LUKS пароль пользователя преобразуется в ключ шифрования с помощью PBKDF2, который затем используется для расшифровки мастер-ключа. Количество итераций в LUKS может достигать 1–2 миллионов.

Протоколы Wi-Fi

В протоколах WPA2 и WPA3 (Wi-Fi Protected Access) PBKDF2 применяется для генерации ключей шифрования на основе пароля сети (PSK). Пароль и SSID (имя сети) обрабатываются PBKDF2 с использованием HMAC-SHA1, что даёт ключ длиной 256 бит. В WPA3 используется более стойкая версия (SAE), но PBKDF2 остаётся в основе.

Криптовалюты и кошельки

Некоторые криптовалютные кошельки (например, Electrum, Bitcoin Core) используют PBKDF2 для генерации seed-фраз (мнемонических фраз) из пароля. Это позволяет восстанавливать кошелёк при утере устройства.

Критика и ограничения

Основной недостаток PBKDF2 — его невысокая устойчивость к атакам с использованием специализированного оборудования. Поскольку алгоритм требует только вычислительных ресурсов (CPU/GPU), а не оперативной памяти, ASIC и GPU могут выполнять миллиарды итераций в секунду, что делает атаки перебором практически возможными при слабых паролях. В 2013 году исследователи из Университета Джонса Хопкинса продемонстрировали, что PBKDF2 с 10 000 итераций (типичное значение для WPA2) может быть взломан за несколько дней на обычном GPU.

В ответ на это были разработаны memory-hard функции, такие как scrypt (RFC 7914) и Argon2 (победитель конкурса Password Hashing Competition 2015). Они требуют значительных объёмов оперативной памяти, что делает атаки на ASIC и GPU экономически невыгодными. Тем не менее, PBKDF2 остаётся широко используемым из-за своей простоты, поддержки в стандартных библиотеках (OpenSSL, .NET, Java) и обратной совместимости.

Статус и стандартизация

RFC 2898 является действующим стандартом IETF, но его преемник, RFC 8018 (PKCS #5 v2.1), опубликованный в 2017 году, внёс следующие изменения:

  • Уточнены требования к длине соли (минимум 16 байт).
  • Добавлена рекомендация использовать HMAC-SHA256 или HMAC-SHA512 вместо устаревших MD5/SHA-1.
  • Указано, что PBKDF1 больше не рекомендуется к использованию.
  • Уточнены параметры для защиты от атак по времени (timing attacks).

На практике большинство современных реализаций (например, в OpenSSL 3.x, Python 3.x, .NET 6+) используют RFC 8018, но ссылаются на RFC 2898 как на первоисточник.

Источники

  • RFC 2898 — «PKCS #5: Password-Based Cryptography Specification Version 2.0» (IETF, 2000).
  • RFC 8018 — «PKCS #5: Password-Based Cryptography Specification Version 2.1» (IETF, 2017).
  • Kaliski, B. (2000). «PKCS #5: Password-Based Cryptography Specification Version 2.0». RFC Editor.
  • NIST Special Publication 800-132 — «Recommendation for Password-Based Key Derivation» (2010).
  • «Password Hashing Competition» (2015). Результаты конкурса.
  • «A Critique of PBKDF2» (2013). Исследование Университета Джонса Хопкинса.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →