Энтропия

Простыми словами

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

Как применяется

Криптографические ключи, nonce и токены получают из CSPRNG, который инициализируется достаточным и корректно собранным seed. Разработчик не придумывает собственный генератор, а использует системный криптографический интерфейс и учитывает поведение при старте, клонировании и сбое источника.

Пример применения

Сервис генерирует токен сброса пароля через системный CSPRNG из 256 случайных бит, хранит его хеш и ограничивает срок. UUID на основе времени и обычный PRNG для этой задачи отклонены как предсказуемые.

Не путать с

  • случайностьслучайность — наблюдаемое свойство последовательности, а длина ключа задаёт пространство значений.
  • Качественный CSPRNG расширяет seed, но неКачественный CSPRNG расширяет seed, но не создаёт непредсказуемость из полностью известного состояния.

Как это работает

  1. Получить seedСистема собирает непредсказуемые события через доверенный механизм ОС или аппаратный источник.
  2. Инициализировать CSPRNGСостояние генератора создаётся и при необходимости дополняется новым материалом.
  3. Сгенерировать значениеПриложение запрашивает нужное число бит через криптографический API без ручных преобразований, уменьшающих пространство.
  4. Защитить жизненный циклСекрет не журналируют, ограничивают срок и учитывают snapshot, fork и восстановление виртуальных машин.

Частые вопросы

Можно ли измерить энтропию одного пароля?

Точно — нет; оценивают модель выбора и пространство возможных значений, а для пользовательских паролей учитывают неравномерность поведения.

Подходит ли Math.random для токенов?

Нет. Обычный PRNG предназначен не для противодействия предсказанию; нужен системный CSPRNG.

Хеширование увеличивает энтропию?

Нет. Хеш может равномерно представить вход, но не добавляет отсутствующую непредсказуемость.

Энтропия — мера непредсказуемости данных, критичная для генерации стойких ключей и случайных значений.