CSPRNG — детермінований генератор для криптографічного використання. Псевдовипадковість не означає слабкість: важлива стійкість до противника за визначених припущень. Алгоритм, джерело ентропії та код споживача слід оцінювати окремо.
RFC 4086 відрізняє криптографічно сильні послідовності від звичайних генераторів для моделювання. Знання частини виходу не має дозволяти вгадувати решту. Самі статистичні тести цього не доводять; передбачуваний seed може знецінити навіть складний на вигляд вихід. [RFC 4086 — Cryptographically strong sequences]
NIST SP 800-90A Rev. 1 визначає Hash_DRBG, HMAC_DRBG і CTR_DRBG. Назва CSPRNG не сертифікує кожну реалізацію. Треба визначити механізм, параметри та отримання ентропії, а не лише назву геш-функції. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]
Backtracking resistance захищає попередні виходи після розкриття поточного стану. Prediction resistance стосується майбутніх; NIST SP 800-90A пов’язує її з ефективним додаванням свіжої ентропії. Одна властивість не означає автоматично іншу чи відновлення лише наступним викликом. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]
OpenSSL 3.5 вказує для RAND_bytes() і RAND_priv_bytes() 1 при успіху, 0 при іншій помилці та -1 для непідтримуваного методу. Збій джерела ентропії може зупинити генерацію. Застосунок має перевіряти результат, а не використовувати неперевірений буфер. [OpenSSL 3.5 — RAND_bytes return values and errors]
libsodium randombytes_buf_deterministic() створює однакову послідовність для однакового seed, зокрема для тестів. Відновлення знімка віртуальної машини може повторити стан і вихід. Відтворюваність тестів не гарантує незалежних секретів між копіями. [libsodium — Random data and deterministic testing]
libsodium randombytes_uniform() обирає рівномірно нижче верхньої межі без зміщення від простої остачі ділення. Якісні вхідні байти не гарантують правильного відображення в цільовий діапазон. Ключі також мають відповідати правилам свого алгоритму. [libsodium — Random data and deterministic testing]
RFC 8439 вимагає не повторювати nonce з тим самим ключем; випадковий вигляд не доводить унікальності. RFC 6979 натомість описує детерміноване створення значення k для підпису. CSPRNG не є універсальною заміною правил протоколу. [RFC 8439 — Nonce uniqueness] [RFC 6979 — Deterministic signing]
Зафіксуйте версію бібліотеки, механізм, ініціалізацію, помилки та поведінку після відновлення чи клонування стану. OpenSSL і libsodium описують свої конкретні функції, не безпеку будь-якого гаманця. Якісна генерація також не запобігає пізнішому витоку резервної копії. [OpenSSL 3.5 — RAND_bytes return values and errors] [libsodium — Random data and deterministic testing]
Для повної картини прочитайте також Cryptographic Entropy, Random Number Generator, Deterministic RNG, Seed Generation. На цю статтю також посилаються Dice Roll Entropy, Cryptographic Entropy, Random Number Generator, Deterministic RNG.