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Специфікація ↗
Спочатку джерела · Не інвестиційна порада