Использование соли служит двум целям: разделение доменов и извлечение случайности.
Если вы уверены, что ваш 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 состоит из двух этапов:
- HKDF-Extract: PRK = HMAC-Hash (соль, IKM)
- HKDF-расширить (PRK, информация, L) -> OKM
(Где IKM — «входной ключевой материал», PRK — «псевдослучайный ключ», OKM — «выходной ключевой материал», L — длина желаемого вывода).
Следовательно, если соль не использовалась, а значение HMAC-Hash(NULL, IKM) каким-то образом просочилось (например, в приведенном выше сценарии «восстановления сообщения»), то все последующие использования HKDF с использованием того же IKM и без соли были бы также быть скомпрометирован.
Если вам не нужна соль для разделения доменов, вам следует подумать, нужна ли вам соль для целей извлечения случайности. Этот вопрос разместил здесь.