Согласно Бумага HKDF, использование соли служит двум целям: разделение доменов и извлечение случайности.
Этот вопрос касается исключительно необходимости соли для извлечения случайности.
Бумага HKDF состояния:
а солевая ценность (т. е. случайный, но не секретный ключ)...
важно для получения общих экстракторов и KDF, которые могут извлекать случайность из произвольных источников с достаточно высокой
энтропия.
Извлечение случайности и получение ключа бумага (ссылка на документ HKDF) гласит:
Кроме того, предположение о «монолитной» случайности
(без ключа), такая как SHA-1, не подходит для настройки
извлечение случайности как ни одна функция (даже если она полностью случайная)
может извлекать близкое к равномерному распределение из произвольного
входные распределения с высокой энтропией. Это так, поскольку когда-то
функция фиксирована (даже если к чисто случайным значениям), то Есть
входные распределения с высокой энтропией, которые будут сопоставлены с небольшими подмножествами
результатов. Таким образом, жизнеспособный подход к извлечению случайности
состоит в том, чтобы рассмотреть семейство (или набор) функций, индексированных набором
ключей. Когда приложению требуется хеширование ввода для
целью извлечения случайности, то случайный элемент (т.
функция) из этого семейства выбирается и функция применяется к
данный ввод. Хотя могут быть определенные входные распределения, которые
плохо взаимодействуют со специфическими функциями в семье, хорошо
семейство извлечения случайностей заставит это «плохое событие» произойти с
очень маленькая вероятность.
Последний вопрос заключается в том, как генерировать случайные известные ключи, используемые
экстрактор. Технически это не сложно, так как стороны могут генерировать
соответствующую случайность, но точные детали зависят от
применение.Например, в обмене ключами Диффи-Хелмана, обсужденном ранее,
стороны обмениваются в чистом виде случайно выбранными значениями, которые
затем объединяются для создания одного ключа [соль] для семейства экстракторов
(например, HMAC-SHA1).
Бумага HKDF состояния:
семья Меркле-Дамгард [используется при разработке многих популярных алгоритмов хеширования, таких как MD5, SHA-1 и SHA-2] построен на случайных
функции сжатия не хороший статистический экстрактор... выход такого семейства на любом распределении, для которого
последний блок ввода фиксирован, статистически далек от однородности)
Затем он повторяет точку зрения, сделанную в Извлечение случайности и получение ключа бумага:
Как мы уже подчеркивали в предыдущих разделах, универсальные экстракторы,
т. е. те, кто работает над произвольными источниками с высокой минимальной энтропией, должно быть
рандомизированный с помощью случайного, но не обязательно секретного ключа (или «соли»).
В частности, следующий за леммой 2 пример показывает, что для каждого
детерминированный экстрактор есть источник с высокой энтропией, для которого
выход далеко не равномерный.
Вопреки этим заявлениям, я знаю реализацию ECDH, которая использует хэш Keccak-256 для общего секретного элемента группы EC без соли, но, возможно, это оправдано либо A) на том основании, что выбор хэша конструкции губки смягчает опасения которые влияют на хэши семейства Меркла-Дамгарда, или B) на том основании, что сжатое точечное представление EC является достаточно однородно случайным (по сравнению с однородностью случайности общего секрета в не-EC DH).
В каких случаях необходима соль? (для каких типов входного ключевого материала и для каких типов функции HMAC-Hash).
Являются ли эти документы устаревшими, и разве опасения, поднятые этими документами по поводу использования соли, в какой-либо степени смягчены благодаря более тщательному исследованию природы современных хеш-функций?