CSPRNG je deterministický generátor určený pro kryptografické použití. Pseudonáhodnost neznamená slabost: rozhoduje odolnost vůči protivníkovi za daných předpokladů. Algoritmus, zdroj entropie a kód, který výstup používá, musí být posuzovány odděleně.
RFC 4086 rozlišuje kryptograficky silné posloupnosti od běžných simulací. Znalost části výstupu nemá umožnit odhad zbytku. Statistické testy samy tuto vlastnost nedokazují; předvídatelný seed může znehodnotit i složitě vypadající výstup. [RFC 4086 — Cryptographically strong sequences]
NIST SP 800-90A Rev. 1 specifikuje Hash_DRBG, HMAC_DRBG a CTR_DRBG. Název CSPRNG však není certifikací každé implementace. Je nutné určit mechanismus, jeho parametry a způsob získání entropie, ne pouze název použité hashovací funkce. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]
Backtracking resistance chrání dřívější výstupy po odhalení současného stavu. Prediction resistance se týká budoucích výstupů; NIST SP 800-90A ji spojuje s účinným doplněním čerstvé entropie. Jedna vlastnost automaticky neznamená druhou ani obnovu pouhým dalším voláním. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]
OpenSSL 3.5 uvádí pro RAND_bytes() a RAND_priv_bytes() hodnotu 1 při úspěchu, 0 při jiné chybě a -1 při nepodporované metodě. Při selhání zdroje entropie může generování odmítnout. Aplikace musí výsledek kontrolovat, nikoli používat neověřený buffer. [OpenSSL 3.5 — RAND_bytes return values and errors]
libsodium randombytes_buf_deterministic() vytváří pro stejný seed stejnou posloupnost, což slouží například testům. Obnova virtuálního stroje ze snímku může zopakovat stav a výstup. Testovací reprodukovatelnost není zárukou nezávislých tajemství mezi kopiemi. [libsodium — Random data and deterministic testing]
libsodium randombytes_uniform() řeší rovnoměrný výběr pod horní mezí bez zkreslení prostým zbytkem po dělení. Samotné kvalitní vstupní bajty nezaručují správné mapování na cílový rozsah. U klíčů se musí respektovat i pravidla příslušného algoritmu. [libsodium — Random data and deterministic testing]
RFC 8439 vyžaduje, aby se nonce neopakoval se stejným klíčem; pouhý náhodný vzhled jedinečnost nedokazuje. RFC 6979 zase popisuje deterministické vytvoření hodnoty k pro podpis. CSPRNG tedy není univerzální náhradou protokolových pravidel. [RFC 8439 — Nonce uniqueness] [RFC 6979 — Deterministic signing]
Při posouzení zaznamenejte verzi knihovny, mechanismus, inicializaci, chyby a chování po obnovení či klonování stavu. Dokumentace OpenSSL a libsodium popisuje své konkrétní funkce, nikoli bezpečnost libovolné peněženky. Kvalitní generování také nezabrání pozdějšímu úniku zálohy. [OpenSSL 3.5 — RAND_bytes return values and errors] [libsodium — Random data and deterministic testing]
Pro nejúplnější obraz čtěte toto heslo společně s Cryptographic Entropy, Random Number Generator, Deterministic RNG, Seed Generation. Opačným směrem na něj odkazují také Dice Roll Entropy, Cryptographic Entropy, Random Number Generator, Deterministic RNG.