485 / 736MIX-H

Entropy Mixing

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

Entropy Mixing объединяет несколько входов при создании секрета. Это может помочь, но два источника не означают автоматически удвоенную безопасность. Важны знания атакующего и связи между источниками.

Entropy Mixing — это совместная обработка генератором нескольких входных данных. Целью может быть использование неопределённости разных источников вместо зависимости от одного. Но дополнительные данные не равны дополнительной энтропии: копия известной информации не добавляет нового секрета. Безопасность зависит от конкретных источников и проверенного способа их сочетания.

Представьте две записи одного события. Названия файлов различаются, но вторая запись не добавляет независимой неизвестной. Так же могут быть связаны время прихода пакетов и время доступа к диску. NIST SP 800-90B предупреждает: оценки энтропии зависимых источников нельзя просто складывать. Сначала нужно выяснить, что остаётся неопределённым, если атакующий знает и остальные входы. [1]

Хеш — это вычисленный отпечаток данных. Но если атакующий знает все входы, он вычислит тот же результат. Ни длинный хеш, ни добавленная публичная константа не сделают данные секретными. RFC 4086 различает смешивание имеющейся неопределённости и детерминированное получение новых значений. Правильно спроектированное смешивание использует то, что источники действительно дают; недостающую энтропию оно не заменяет. [2]

XOR сравнивает биты: одинаковые дают ноль, разные — единицу. Поэтому X XOR X = 0: сочетание значения с его копией здесь устраняет всю неопределённость. Если же один вход равномерно случаен и независим от другого, результат остаётся равномерным. Так RFC 4086 показывает важность предпосылок. Это не инструкция по сборке самодельного генератора для кошелька. [2]

Оценивая конкретное решение, спросите, откуда поступают входы и что атакующий может с ними сделать. HKDF, метод получения криптографических ключей из исходных данных, использует вспомогательный вход salt. Он не обязан быть секретным, но RFC 5869 предполагает его независимость от исходных данных ключа и требует, чтобы приложение не позволяло атакующему выбрать или изменить его. Salt здесь — имя параметра. Список источников или случайный вид результата сами по себе не гарантируют безопасность при отказе источника. [4]

NIST SP 800-90B исходит из основного источника шума. К его данным можно присоединить результаты других источников, если вместе они проходят одобренную обработку, называемую conditioning. Но в этом режиме дополнительная энтропия им не засчитывается. Больше входов не означает автоматического увеличения признанной величины. Это правило конкретной оценки, а не утверждение, что остальные источники никогда не помогают. [1]

Разница видна в OpenSSL 3.5 — криптографической библиотеке, которую программы могут использовать для шифрования и случайных чисел. Функция RAND_add() подмешивает данные из буфера, то есть выделенного участка памяти. num задаёт количество читаемых байтов, а randomness оценивает их энтропию в байтах от нуля до num. Размер участка памяти не подтверждает эту оценку. Генератор по умолчанию обычно сам инициализируется и автоматически пополняет энтропию из системных источников. [3]

Пополнение генератора свежей энтропией называют reseeding. Это отличается от добавления произвольных данных. Согласно документации OpenSSL 3.5, в режиме FIPS, следующем правилам для криптографических модулей, данные приложения не признаются доверенным источником энтропии. Их подмешивают только как дополнительный вход и не засчитывают как полный reseed. Поэтому сам вызов RAND_add() не доказывает такого обновления. [3]

HKDF из RFC 5869 делит работу на HKDF-Extract и HKDF-Expand. Первый шаг сосредоточивает доступную входную энтропию в промежуточном ключе, второй получает из него данные нужной длины. Новый независимый секрет при этом не приобретается. Параметр info позволяет связать результат с применением, например указать назначение производного ключа. Этот контекст не заменяет качественные исходные данные и не доказывает появления энтропии. [4]

Для полной картины прочитайте эту статью вместе с 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Спецификация
Обновлено: Сначала источники · Не является инвестиционной рекомендацией