Как использовать 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()

Другие вопросы по тегам