Как использовать OpenSSL 1.1.1 для реализации HDF-Extract?
Я пытаюсь реализовать части QUIC RFC, и они отмечают:
initial_salt = 0xc3eef712c72ebb5a11a7d2432bb46365bef9f502
initial_secret = HKDF-Extract(initial_salt,
client_dst_connection_id)
Мне просто интересно, как это сопоставить здесь: https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_CTX_set_hkdf_md.html
Я получаю это:
EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY В этом режиме вызов EVP_PKEY_derive(3) просто выполнит операцию извлечения. Возвращаемое значение будет промежуточным псевдослучайным ключом фиксированной длины K.
Значения дайджеста, ключа и соли должны быть установлены до того, как будет получен ключ, иначе возникнет ошибка.
Но я здесь запутался. Я вижу, как установить режим, алгоритм, соль, но я потерялся, где установитьclient_dst_connection_id
.
1 ответ
HKDF описан в RFC5869, который определяет операцию HKDF-Extract следующим образом:
HKDF-Extract(соль, IKM) -> PRK
Параметры: Хеширование хеш-функции; HashLen обозначает длину вывода хеш-функции в октетах.
Входные данные: соль, необязательное значение соли (несекретное случайное значение); если не указан, устанавливается в строку нулей HashLen. Материал ввода IKM
Вывод: PRK - псевдослучайный ключ (из октетов HashLen)
Итак, второй параметр (client_dst_connection_id
в данном случае) - это "вводимый ключевой материал".
На странице руководства OpenSSL, на которую вы ссылаетесь, вы можете увидеть, что ключевой материал может быть установлен с помощью EVP_PKEY_CTX_set1_hkdf_key()
.
Обратите внимание, что на странице руководства также говорится следующее для EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY
:
Значения дайджеста, ключа и соли должны быть установлены до того, как будет получен ключ, иначе возникнет ошибка.
Итак, ключевые и солидные значения ясны. Вам также необходимо указать используемый дайджест черезEVP_PKEY_CTX_set_hkdf_md()