482 / 691CSPRNG

CSPRNG

Kryptograficky bezpečný generátor pseudonáhodných čísel

CSPRNG vytváří výstup z tajného stavu tak, aby známé hodnoty neumožnily prakticky předvídat další. Bezpečnost závisí také na počáteční entropii, obnově stavu a správném použití rozhraní.

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.

DOC · 001RFC 4086 — Cryptographically strong sequencesSpecifikace ↗DOC · 002NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistanceSpecifikace ↗DOC · 003OpenSSL 3.5 — RAND_bytes return values and errorsDokumentace ↗DOC · 004libsodium — Random data and deterministic testingDokumentace ↗DOC · 005RFC 8439 — Nonce uniquenessSpecifikace ↗DOC · 006RFC 6979 — Deterministic signingSpecifikace ↗
Primární zdroje · Nejde o investiční doporučení