481 / 691RNG

Random Number Generator

Генератор случайных чисел

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

Random Number Generator выдаёт значения для определённой цели. Криптографическое применение требует, чтобы противник практически не мог их предсказать при указанных предположениях. Физический источник энтропии, детерминированный генератор и интерфейс операционной системы — разные уровни; само название RNG не определяет их свойства.

Источник энтропии даёт неопределённость, обработка подготавливает вход, а детерминированный генератор формирует выход из внутреннего состояния. NIST SP 800-90C объединяет механизмы 90A с источниками по 90B. Поэтому каждый выданный бит необязательно соответствует новому физическому измерению. [NIST SP 800-90C — RBG constructions]

Последовательность может пройти статистические тесты и при этом быть известной атакующему. RFC 4086 предостерегает от часов, серийных номеров и предсказуемых начальных значений. Название или распределение результатов генератора для моделирования сами по себе не делают его подходящим для криптографии. [RFC 4086 — Unpredictability and weak inputs]

NIST SP 800-90B оценивает источник шума, обработку и проверки работоспособности при запуске и во время работы. Они выявляют неисправности источника, но не доказывают безопасность всего кошелька. Обработка отказов входит в проектирование: результат неисправного тракта нельзя молча выдавать за проверенную случайность. [NIST SP 800-90B — Source health and failure handling]

Linux getrandom() обычно ждёт инициализации источника urandom. С GRND_NONBLOCK вместо ожидания может вернуть EAGAIN. После инициализации запросы urandom до 256 байтов гарантируют полное чтение без прерывания сигналом; для больших запросов гарантии нет. Приложение должно учитывать возвращаемый статус. [Linux getrandom(2) — Initialization and return behavior]

Web Crypto getRandomValues() заполняет поддерживаемые целочисленные массивы криптографически стойкими значениями; объём свыше 65536 байтов вызывает QuotaExceededError. Для создания ключей спецификация рекомендует generateKey(). Наличие интерфейса не подтверждает надёжность страницы и не защищает секреты от кода, имеющего к ним доступ. [W3C Web Crypto — getRandomValues and key generation]

BIP39 сначала кодирует от 128 до 256 бит начальной энтропии с производной контрольной суммой. Затем из слов и необязательной passphrase через PBKDF2 выводит 512-битовый seed. Ни контрольная сумма, ни более длинный результат не исправляют предсказуемый вход; самостоятельный выбор слов не заменяет случайную генерацию. [BIP39 — Initial entropy and mnemonic-to-seed derivation]

Детерминированному генератору нужны защищённое состояние и правильная инициализация. NIST SP 800-90A различает создание экземпляра, генерацию, повторное засевание и удаление экземпляра. Восстановление после раскрытия состояния требует подходящего механизма и свежей энтропии, неизвестной атакующему; один следующий вызов в общем случае этого не гарантирует. [NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseeding]

Проверка должна установить источник, алгоритм, инициализацию, интерфейс и поведение при ошибке в оцениваемой версии. Обозначения аппаратный или офлайн сами не подтверждают эту цепочку. Приведённые стандарты объясняют требования к генерации; они не сертифицируют конкретный кошелёк и не предотвращают последующую утечку его резервной копии. [NIST SP 800-90C — RBG constructions] [RFC 4086 — Unpredictability and weak inputs]

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

DOC · 001NIST SP 800-90C — RBG constructionsСпецификация ↗DOC · 002RFC 4086 — Unpredictability and weak inputsСпецификация ↗DOC · 003NIST SP 800-90B — Source health and failure handlingСпецификация ↗DOC · 004Linux getrandom(2) — Initialization and return behaviorДокументация ↗DOC · 005W3C Web Crypto — getRandomValues and key generationСпецификация ↗DOC · 006BIP39 — Initial entropy and mnemonic-to-seed derivationСпецификация ↗DOC · 007NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseedingСпецификация ↗
Сначала источники · Не является инвестиционной рекомендацией