CSPRNG to generator deterministyczny przeznaczony do kryptografii. Pseudolosowość nie oznacza słabości: liczy się odporność na przeciwnika przy określonych założeniach. Algorytm, źródło entropii i kod używający wyników wymagają oddzielnej oceny.
RFC 4086 odróżnia ciągi silne kryptograficznie od zwykłych generatorów symulacyjnych. Znajomość części wyjścia nie powinna pozwalać odgadnąć reszty. Same testy statystyczne tego nie dowodzą; przewidywalny seed może osłabić nawet pozornie złożony wynik. [RFC 4086 — Cryptographically strong sequences]
NIST SP 800-90A Rev. 1 określa Hash_DRBG, HMAC_DRBG i CTR_DRBG. Etykieta CSPRNG nie certyfikuje każdej implementacji. Trzeba wskazać mechanizm, parametry i pozyskiwanie entropii, a nie tylko nazwę funkcji skrótu. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]
Backtracking resistance chroni wcześniejsze wyniki po ujawnieniu obecnego stanu. Prediction resistance dotyczy przyszłych wyników; NIST SP 800-90A wiąże ją ze skutecznym dodaniem świeżej entropii. Żadna cecha nie oznacza automatycznie drugiej ani odzyskania bezpieczeństwa przez kolejne wywołanie. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]
OpenSSL 3.5 podaje dla RAND_bytes() i RAND_priv_bytes() 1 przy powodzeniu, 0 przy innym błędzie oraz -1 przy nieobsługiwanej metodzie. Awaria źródła entropii może zatrzymać generowanie. Aplikacja musi sprawdzić wynik zamiast używać niezweryfikowanego bufora. [OpenSSL 3.5 — RAND_bytes return values and errors]
libsodium randombytes_buf_deterministic() daje ten sam ciąg dla tego samego seedu, na przykład w testach. Przywrócenie migawki maszyny wirtualnej może powtórzyć stan i wynik. Powtarzalność testów nie gwarantuje niezależnych sekretów w kopiach. [libsodium — Random data and deterministic testing]
libsodium randombytes_uniform() wybiera równomiernie poniżej górnej granicy bez obciążenia prostą resztą z dzielenia. Dobre bajty wejściowe nie gwarantują poprawnego odwzorowania do zakresu docelowego. Klucze muszą też spełniać reguły właściwego algorytmu. [libsodium — Random data and deterministic testing]
RFC 8439 wymaga niepowtarzania nonce z tym samym kluczem; losowy wygląd nie dowodzi unikalności. RFC 6979 opisuje natomiast deterministyczne tworzenie wartości k podpisu. CSPRNG nie zastępuje zatem uniwersalnie reguł protokołu. [RFC 8439 — Nonce uniqueness] [RFC 6979 — Deterministic signing]
Zapisz wersję biblioteki, mechanizm, inicjalizację, błędy i zachowanie po przywróceniu lub sklonowaniu stanu. OpenSSL i libsodium dokumentują konkretne funkcje, nie bezpieczeństwo dowolnego portfela. Dobre generowanie nie zapobiega też późniejszemu wyciekowi kopii zapasowej. [OpenSSL 3.5 — RAND_bytes return values and errors] [libsodium — Random data and deterministic testing]
Pełniejszy obraz uzyskasz, czytając to hasło razem z Cryptographic Entropy, Random Number Generator, Deterministic RNG, Seed Generation. Do tego hasła prowadzą również odsyłacze z Dice Roll Entropy, Cryptographic Entropy, Random Number Generator, Deterministic RNG.