Получение ключей HKDF
RFC 5869 Extract-and-Expand получение ключей на основе HMAC
Документация HKDF
HKDF (функция получения ключей Extract-and-Expand на основе HMAC) определена в RFC 5869. Она обеспечивает надёжный метод получения криптографических ключей из входного ключевого материала с использованием двухэтапного процесса: Извлечение и Расширение.
HKDF широко используется в современных протоколах безопасности, включая TLS 1.3, Signal Protocol, Noise Protocol Framework и SSH. Чёткое разделение фаз извлечения и расширения делает его особенно подходящим для получения иерархий ключей.
Фаза извлечения: HKDF-Extract(salt, IKM) → PRK
Фаза извлечения концентрирует потенциально рассеянную энтропию из входного ключевого материала (IKM) в псевдослучайный ключ (PRK) фиксированной длины:
- Принимает соль (необязательно, по умолчанию HashLen нулей) и IKM как входные данные
- Вычисляет PRK = HMAC-Hash(salt, IKM)
- Длина PRK равна длине вывода хеша (32 байта для SHA-256)
- Соль действует как ключ для HMAC, усиливая извлечение
Фаза расширения: HKDF-Expand(PRK, info, L) → OKM
Фаза расширения растягивает PRK в выходной ключевой материал (OKM) нужной длины:
- Принимает PRK, info (контекст/метка) и желаемую длину вывода L
- Итеративно вычисляет T(i) = HMAC-Hash(PRK, T(i-1) | info | счётчик)
- Объединяет результаты: OKM = T(1) | T(2) | ... | T(N)
- Максимальная длина вывода составляет 255 × HashLen байт
Типичные случаи использования
- Расписание ключей TLS 1.3: получение traffic secrets, ключей handshake и ключей приложения
- Signal Protocol: получение chain keys и message keys из общих секретов
- Обмен ключами SSH: получение ключей шифрования и целостности после ECDH
- Иерархия ключей: получение нескольких ключей специального назначения из master secret
HKDF vs PBKDF2
| Характеристика | HKDF | PBKDF2 |
|---|---|---|
| Стандарт | RFC 5869 | RFC 8018 |
| Тип входных данных | Общие секреты, выводы DH | Пользовательские пароли |
| Итерации | Один проход | Много (10K-1M) |
| Скорость | Быстро | Намеренно медленно |
| Параметр Info | Да (привязка контекста) | Нет |
| Основной случай использования | Высокоэнтропийный ввод | Низкоэнтропийные пароли |
Соображения безопасности
- HKDF предполагает, что IKM уже содержит достаточную энтропию; не использовать со слабыми паролями
- Параметр info должен однозначно идентифицировать предполагаемое использование ключа (разделение контекста)
- Соль необязательна, но рекомендуется при извлечении нескольких ключей из одного IKM
- PRK никогда не должен использоваться напрямую; всегда используйте фазу расширения для получения финальных ключей
Технические ссылки
Связанные инструменты
Получение ключей PBKDF2
Получайте безопасные ключи шифрования из паролей с PBKDF2 SHA-256/384/512, соответствует OWASP
HMAC Генератор
Генерация HMAC кодов аутентификации с алгоритмами MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA3 и RIPEMD-160
AES Шифрование/Дешифрование
Безопасное шифрование и дешифрование текста с использованием алгоритма AES
SHA Генератор хешей
Онлайн-генератор SHA хешей с поддержкой алгоритмов SHA-1, SHA-256, SHA-384, SHA-512