482 / 691CSPRNG

CSPRNG

Kryptograficznie bezpieczny generator liczb pseudolosowych

CSPRNG tworzy wyniki z tajnego stanu tak, by znajomość jednych wartości nie pozwalała praktycznie przewidzieć innych. Bezpieczeństwo zależy też od początkowej entropii, odzyskiwania stanu i poprawnej obsługi interfejsu.

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.

DOC · 001RFC 4086 — Cryptographically strong sequencesSpecyfikacja ↗DOC · 002NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistanceSpecyfikacja ↗DOC · 003OpenSSL 3.5 — RAND_bytes return values and errorsDokumentacja ↗DOC · 004libsodium — Random data and deterministic testingDokumentacja ↗DOC · 005RFC 8439 — Nonce uniquenessSpecyfikacja ↗DOC · 006RFC 6979 — Deterministic signingSpecyfikacja ↗
Najpierw źródła · To nie jest porada inwestycyjna