Рейтинг:3

Приложения, в которых вы должны/не должны использовать соль с HKDF

флаг in

В rfc5869 говорится об использовании или отсутствии солей с HKDF:

HKDF предназначен для работы со случайной солью и без нее. Это сделано для того, чтобы приспособить приложения, где значение соли недоступно.Мы подчеркиваем, однако, что использование соли значительно повышает эффективность HKDF, обеспечивая независимость между различными вариантами использования хеш-функции, поддерживая «независимую от источника» экстракцию и укрепляя аналитические результаты, лежащие в основе схемы HKDF.

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

  • что означает независимость двух применений хеш-функции?

  • что означает "независимая от источника извлечение"?

  • что такое практический пример варианта использования, в котором соль абсолютно должна быть используется с HKDF?

kelalaka avatar
флаг in
[Некоторые ответы здесь] (https://crypto.stackexchange.com/q/76588/18298) и [Разделение доменов] (https://crypto.stackexchange.com/q/83306/18298) для хеш-функций. Однако я нашел это широким вопросом.
kelalaka avatar
флаг in
что означает независимость двух применений хеш-функции? «Разделение домена»
knaccc avatar
флаг es
Поскольку соль предназначена для разделения доменов и извлечения случайности, я задал этот более конкретный вопрос только о части извлечения случайности... https://crypto.stackexchange.com/questions/97980/hdkf-randomness-extraction-salt -или-без соли
Рейтинг:2
флаг es

Использование соли служит двум целям: разделение доменов и извлечение случайности.

Если вы уверены, что ваш IKM (входной ключевой материал) используется только в одном «домене», вам не нужна соль для разделения доменов. Вместо этого в одном домене вы используете параметр info для создания нескольких ключей из одного и того же IKM для разных контекстов в домене.

Если ваш IKM уже является равномерно случайным (например, когда это равномерно случайный закрытый ключ, используемый для получения подключей через HKDF), вам не нужна соль для целей извлечения случайности, если IKM имеет достаточную длину в битах. для ваших целей.

Разделение доменов

26 страница "Криптографическое извлечение и получение ключей: Схема HKDF"бумага (называемая [HKDF-бумага] в rfc5869) дает следующий пример необходимости разделения доменов:

Важность такой независимости можно проиллюстрировать следуя примеру из "реальной жизни"... A Обмен Диффи-Хеллмана аутентифицируется путем подписания ключа $г^{ху}$. В на самом деле то, что подписано $Ч(г^{ху})$ для некоторой хеш-функции $Ч$, сказать ША-1. Если подпись позволяет восстановить сообщение (например, RSA), то злоумышленник не узнает $г^{ху}$ скорее $Ч(г^{ху})$; таким образом, если один думает о $Ч$ как случайный оракул, то ничего не известно о $г^{ху}$. Теперь предположим, что приведенный выше протокол извлекает ключи через традиционный KDF, а именно ключи вычисляются как $H(g^{xy} \mathbin\| v)$ для некоторых общественные ценности $v$. В этом случае, если мы будем следовать $Ч$ = пример SHA-1 и предполагать $г^{ху}$ имеет длину 1024, мы получаем, что вычисления $H(g^{xy}\mathbin\|v)$ является то же, что вычисления $Ч$ на $v$ с IV $Ч$ установлен в $Ч(г^{ху})$ (за простоты предположим, что вычисление $Ч$ на $г^{ху}$ не использует добавление длины). Однако это означает, что злоумышленник узнает все ключи, так как он знает $Ч(г^{ху})$! Сбой протокола не из-за особой слабости $Ч$ а скорее к использованию одного и того же (детерминированная) функция для двух разных функций: хэш функция применяется к $г^{ху}$ и КДФ. Напротив, если один ключ $Ч$ с помощью ценность соли при ее использовании KDF обеспечила бы независимость между двумя функциями.

HDKF состоит из двух этапов:

  1. HKDF-Extract: PRK = HMAC-Hash (соль, IKM)
  2. HKDF-расширить (PRK, информация, L) -> OKM

(Где IKM — «входной ключевой материал», PRK — «псевдослучайный ключ», OKM — «выходной ключевой материал», L — длина желаемого вывода).

Следовательно, если соль не использовалась, а значение HMAC-Hash(NULL, IKM) каким-то образом просочилось (например, в приведенном выше сценарии «восстановления сообщения»), то все последующие использования HKDF с использованием того же IKM и без соли были бы также быть скомпрометирован.

Если вам не нужна соль для разделения доменов, вам следует подумать, нужна ли вам соль для целей извлечения случайности. Этот вопрос разместил здесь.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.