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

PBKDF2

PBKDF2 (Password-Based Key Derivation Function 2) — это алгоритм генерации ключей на основе пароля, предназначенный для защиты паролей от атак с использованием перебора (brute-force) и радужных таблиц. Относится к классу функций деривации ключа (KDF) и широко применяется в криптографии для хранения хэшей паролей и создания криптостойких ключей для шифрования.

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

PBKDF2 был разработан в 2000 году группой специалистов под руководством Брюса Шнайера (Bruce Schneier) и опубликован как часть стандарта PKCS #5 (Public-Key Cryptography Standards #5) версии 2.0. В 2001 году алгоритм был стандартизирован в RFC 2898, а позже вошёл в состав рекомендаций Национального института стандартов и технологий США (NIST) в документе SP 800-132. Основной целью создания PBKDF2 было устранение недостатков более ранних функций хеширования паролей (например, простого SHA-1), которые были уязвимы к ускоренному перебору с использованием специализированного оборудования (GPU, ASIC).

Принцип работы

PBKDF2 использует метод «растягивания ключа» (key stretching), при котором к одному паролю применяется многократное повторение (итерации) псевдослучайной функции (PRF). В качестве PRF обычно выступает HMAC (Hash-based Message Authentication Code) на основе криптографической хэш-функции, такой как SHA-1, SHA-256 или SHA-512.

Основные параметры

Алгоритм принимает на вход четыре параметра:

  • Пароль (Password) — исходная строка, вводимая пользователем.
  • Соль (Salt) — случайное значение (обычно не менее 16 байт), добавляемое к паролю для предотвращения атак по радужным таблицам.
  • Количество итераций (Iteration count) — число повторений хеширования, определяющее вычислительную сложность.
  • Длина выходного ключа (dkLen) — требуемая длина производного ключа в байтах.

Процесс вычисления

Алгоритм последовательно выполняет итерации, каждая из которых включает:

  1. Вычисление HMAC от пароля и соли с учётом номера блока.
  2. Побитовое сложение (XOR) результатов всех итераций для получения финального значения.

Формула для одного блока (U) длиной hLen (длина хэша PRF) выглядит так:

`` U_1 = PRF(Password, Salt || INT_32_BE(i)) U_2 = PRF(Password, U_1) ... U_c = PRF(Password, U_{c-1}) T_i = U_1 XOR U_2 XOR ... XOR U_c ``

Где c — количество итераций, iпорядковый номер блока (целое число от 1 до ceil(dkLen / hLen)). Выходной ключ формируется путём конкатенации всех блоков T_i и обрезания до требуемой длины dkLen.

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

Достоинства

  • Настраиваемая вычислительная сложность: увеличение числа итераций прямо пропорционально замедляет перебор паролей злоумышленником, при этом незначительно влияет на время проверки легитимного пользователя.
  • Встроенная защита от радужных таблиц: использование случайной соли делает предварительные вычисления (например, построение радужных таблиц) неэффективными.
  • Стандартизация: поддерживается большинством криптографических библиотек (OpenSSL, Bouncy Castle, .NET, Java Cryptography Extension) и операционных систем (Linux, macOS, Windows).

Недостатки

  • Уязвимость к атакам на GPU и ASIC: алгоритм требует относительно мало памяти (RAM), что позволяет эффективно реализовывать его на графических процессорах и специализированных интегральных схемах. Это делает PBKDF2 менее устойчивым к массовому перебору по сравнению с память-затратными алгоритмами, такими как scrypt или Argon2.
  • Фиксированная длина хэша: при использовании HMAC-SHA1 (по умолчанию) выходной хэш имеет длину 160 бит, что при малом количестве итераций может быть атаковано коллизиями (хотя на практике это маловероятно).
  • Зависимость от итераций: при слишком малом числе итераций (менее 100 000 по современным рекомендациям) защита становится недостаточной.

Применение

PBKDF2 используется в различных областях информационной безопасности:

  • Хранение паролей: многие веб-приложения, базы данных и операционные системы (например, встроенная утилита crypt() в Linux) применяют PBKDF2 для хэширования пользовательских паролей.
  • Генерация ключей шифрования: алгоритм используется в протоколах WPA/WPA2 (Wi-Fi Protected Access) для получения ключа шифрования из парольной фразы (PSK).
  • Создание мастер-ключей: в менеджерах паролей (например, KeePass, Bitwarden) PBKDF2 применяется для превращения мастер-пароля в ключ, шифрующий базу данных.
  • Формат файлов: PBKDF2 входит в спецификации форматов контейнеров шифрования, таких как TrueCrypt (организация признана нежелательной в РФ) и VeraCrypt.

Современное состояние и альтернативы

По состоянию на 2025 год PBKDF2 считается устаревшим для новых проектов, но по-прежнему широко используется в существующих системах. Рекомендуемое количество итераций для PBKDF2-HMAC-SHA256 составляет не менее 600 000 (по данным OWASP на 2023 год). Основными альтернативами являются:

  • scrypt — алгоритм, требующий значительного объёма оперативной памяти, что затрудняет атаки на GPU и ASIC.
  • Argon2 — победитель конкурса Password Hashing Competition (2015), рекомендованный для новых систем, поддерживает настраиваемую память, параллелизм и защиту от атак по времени.

Несмотря на появление более совершенных алгоритмов, PBKDF2 остаётся важным эталоном в криптографии и изучается в курсах информационной безопасности как классический пример функции деривации ключа.

Интересные факты

  • В 2013 году уязвимость в реализации PBKDF2 в протоколе WPA2 (Wi-Fi Protected Access II) позволила проводить атаки на сети Wi-Fi с использованием радужных таблиц, что привело к рекомендациям использовать более длинные соли.
  • Алгоритм PBKDF2 является обязательным для использования в системах, соответствующих стандарту FIPS 140-2 (США) при хранении паролей.
  • В 2020 году исследователи продемонстрировали, что PBKDF2 с 10 000 итераций (рекомендация 2000 года) может быть взломан за несколько часов с использованием современного GPU.

Источники

  • RFC 2898 — PKCS #5: Password-Based Cryptography Specification Version 2.0 (2000).
  • NIST Special Publication 800-132 — Recommendation for Password-Based Key Derivation (2010).
  • OWASP — Password Storage Cheat Sheet (актуальная версия).
  • Bruce Schneier, «Applied Cryptography» (2nd edition, 1996) — описание принципов key stretching.
  • Colin Percival, «Stronger Key Derivation via Sequential Memory-Hard Functions» (2009) — сравнение PBKDF2 и scrypt.

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

На главную BFOmetr →