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

HKDF

HKDF (англ. HMAC-based Key Derivation Function — функция формирования ключа на основе HMAC) — это криптографическая функция формирования ключей, основанная на использовании HMAC (Hash-based Message Authentication Code). HKDF разработана для преобразования исходного ключевого материала (например, пароля, общего секрета, полученного в ходе протокола Диффи — Хеллмана, или энтропии) в один или несколько криптостойких ключей заданной длины, пригодных для использования в симметричном шифровании, аутентификации или других криптографических целях. HKDF стандартизирована в документе RFC 5869 (2010 год) и является одной из наиболее распространённых и рекомендуемых функций формирования ключей в современной криптографии.

История и стандартизация

HKDF была предложена криптографом Хьюго Кравчиком (Hugo Krawczyk) в 2010 году в рамках рабочей группы IETF. Разработка функции была мотивирована необходимостью создания простого, но безопасного и универсального метода получения ключей из неидеального исходного материала. В отличие от более ранних функций, таких как PBKDF2 (Password-Based Key Derivation Function 2), HKDF не ориентирована на защиту от перебора паролей, а предназначена для случаев, когда исходный материал уже обладает достаточной энтропией, но требует дополнительной обработки.

RFC 5869 (HMAC-based Extract-and-Expand Key Derivation Function) официально описывает HKDF как двухэтапный процесс: извлечение (extract) и расширение (expand). Стандарт был принят и включён в рекомендации многих криптографических библиотек и протоколов, включая TLS 1.3, IPsec, SSH и другие. В Российской Федерации HKDF не входит в перечень стандартизированных криптографических алгоритмов (ГОСТ), однако её использование допускается в коммерческих и исследовательских целях при условии соответствия требованиям законодательства о криптографии.

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

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

Этап извлечения (Extract)

На этом этапе исходный ключевой материал (IKM, Input Keying Material) преобразуется в псевдослучайный ключ фиксированной длины (PRK, Pseudorandom Key). Для этого используется HMAC с хеш-функцией (например, SHA-256 или SHA-512). Формула этапа извлечения:

PRK = HMAC-Hash(salt, IKM)

Здесь salt — это необязательная, но рекомендуемая соль (случайная или известная строка), которая добавляется для повышения стойкости к атакам по словарям и для обеспечения уникальности выходного ключа даже при одинаковом IKM. Если соль не задана, она устанавливается в строку нулевой длины. Длина PRK равна длине выходного хеша используемой HMAC (например, 32 байта для SHA-256).

Этап расширения (Expand)

На втором этапе из PRK генерируется требуемое количество выходных ключевых битов (OKM, Output Keying Material) произвольной длины. Для этого используется итеративное применение HMAC с контекстной информацией. Формула этапа расширения:

T(0) = пустая строка T(1) = HMAC-Hash(PRK, T(0) || info || 0x01) T(2) = HMAC-Hash(PRK, T(1) || info || 0x02) ... OKM = T(1) || T(2) || ... || T(n)

Здесь info — это необязательная контекстная строка (например, идентификатор приложения или цели использования ключа), а 0x01, 0x02 и т.д. — однобайтовые счётчики итераций. Общая длина OKM не должна превышать 255 × L, где L — длина выходного хеша (в байтах). Для SHA-256 максимальная длина OKM составляет 8160 байт.

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

HKDF обладает рядом свойств, делающих её предпочтительной для многих приложений:

Применение

HKDF широко используется в современных криптографических протоколах и системах. Основные области применения включают:

Пример использования в TLS 1.3

В протоколе TLS 1.3 HKDF используется в двух режимах:

  1. HKDF-Extract: из общего секрета (например, результата обмена ключами по протоколу ECDHE) и соли (например, предыдущего ключа) извлекается PRK.
  2. HKDF-Expand: из PRK с использованием контекстной информации (например, меток «tls13 key schedule») генерируются ключи для шифрования, аутентификации и другие.

Сравнение с другими функциями

HKDF часто сравнивают с PBKDF2, bcrypt, scrypt и Argon2. Основные отличия:

Таким образом, HKDF не заменяет функции для защиты паролей, а дополняет их в сценариях, где исходный материал уже обладает достаточной энтропией (например, общий секрет в криптографических протоколах).

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

Источники

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

На главную BFOmetr →