485 / 691MIX-H

Entropy Mixing

Смешивание энтропии

Entropy Mixing объединяет входы для создания секретных значений. Польза зависит от непредсказуемости, зависимостей и конкретного механизма; число источников и длина хеша сами по себе не определяют безопасность.

Смешивание энтропии обрабатывает несколько входов в общее состояние или результат. Нужно различать внесённые данные, подтверждённую энтропию и последующее детерминированное развёртывание. Два названия интерфейсов не обязательно означают два независимых источника.

NIST SP 800-90B отмечает, что совместную энтропию зависимых источников бывает трудно оценить. Время прихода пакетов и обращения к диску может быть связано. Поэтому отдельные оценки нельзя просто сложить без документированной модели. [NIST SP 800-90B — Additional noise sources]

RFC 4086 использует XOR как простой пример смешивания. Независимый равномерный вход сохраняет равномерность результата, но копия того же входа даёт X XOR X = 0. Это иллюстрация зависимости, а не рецепт создания кошелька. [RFC 4086 — Mixing and randomness requirements]

Сильное смешивание может сосредоточить имеющуюся неопределённость; детерминированный хеш известных входов остаётся предсказуемым. RFC 4086 различает смешивание и развёртывание. Длина результата и добавление известной константы не доказывают соответствующего количества новой энтропии. [RFC 4086 — Mixing and randomness requirements]

NIST SP 800-90B разрешает присоединять дополнительные шумовые входы к основному источнику через одобренное кондиционирование, но не засчитывает им дополнительную энтропию в этом режиме. Это правило оценки, а не утверждение, что другие источники никогда не помогают. [NIST SP 800-90B — Additional noise sources]

В OpenSSL 3.5 RAND_add() смешивает num байтов; randomness оценивает энтропию в байтах от нуля до num. Длина буфера не обосновывает оценку. Генератор по умолчанию обычно автоматически инициализируется и обновляется из системных источников. [OpenSSL 3.5 — RAND_add and FIPS reseeding]

Документация OpenSSL 3.5 указывает: в режиме FIPS данные приложения служат лишь дополнительным входом, а не доверенным источником энтропии. Подмешивание не считается полным reseed. Сам вызов RAND_add() поэтому не подтверждает такого обновления. [OpenSSL 3.5 — RAND_add and FIPS reseeding]

RFC 5869 различает HKDF-Extract и HKDF-Expand. Первый концентрирует входную энтропию, второй выводит требуемую длину. Параметр info связывает результат с контекстом приложения; он не заменяет качественный исходный материал и не доказывает новую энтропию. [RFC 5869 — HKDF extraction, expansion and independence]

Проверка должна определить происхождение входов, зависимости, возможности атакующего и конкретный механизм. RFC 5869 прямо рассматривает независимость и манипулирование солью. Перечень источников или тест случайного вида не доказывает безопасность конструкции после отказа источника. [RFC 5869 — HKDF extraction, expansion and independence]

Для полной картины прочитайте эту статью вместе с Cryptographic Entropy, CSPRNG, True Random Number Generator, Seed Generation. На эту статью также ссылаются Dice Roll Entropy, True Random Number Generator.

DOC · 001NIST SP 800-90B — Additional noise sourcesСпецификация ↗DOC · 002RFC 4086 — Mixing and randomness requirementsСпецификация ↗DOC · 003OpenSSL 3.5 — RAND_add and FIPS reseedingДокументация ↗DOC · 004RFC 5869 — HKDF extraction, expansion and independenceСпецификация ↗
Сначала источники · Не является инвестиционной рекомендацией