481 / 691RNG

Random Number Generator

Generátor náhodných čísel

RNG je součást cesty od zdroje nejistoty k použitelným hodnotám. Pro tajné klíče rozhoduje nepředvídatelnost, inicializace a zacházení se selháním, nikoli jen náhodný vzhled výstupu.

Random Number Generator dodává hodnoty pro zvolený účel. Kryptografické použití vyžaduje, aby je protivník nedokázal prakticky předvídat za daných předpokladů. Fyzický zdroj entropie, deterministický generátor a rozhraní operačního systému jsou různé vrstvy; označení RNG samo jejich vlastnosti neurčuje.

Zdroj entropie poskytuje nejistotu, její úprava připravuje vstup a deterministický generátor vytváří výstup z vnitřního stavu. NIST SP 800-90C spojuje mechanismy z části 90A se zdroji podle 90B. Ne každý vrácený bit proto odpovídá novému fyzickému měření. [NIST SP 800-90C — RBG constructions]

Posloupnost může projít statistickými testy a přesto být útočníkovi známá. RFC 4086 varuje před časem, sériovými čísly a předvídatelnými počátečními hodnotami. Generátor pro simulaci proto nelze považovat za kryptograficky vhodný pouze podle názvu nebo rozložení výsledků. [RFC 4086 — Unpredictability and weak inputs]

NIST SP 800-90B posuzuje šumový zdroj, úpravu výstupu a zdravotní testy při startu i za provozu. Tyto testy hledají závady zdroje, nedokazují bezpečnost celé peněženky. Zpracování poruchy patří do návrhu; výstup z vadné cesty se nemá tiše vydávat za ověřenou náhodnost. [NIST SP 800-90B — Source health and failure handling]

Linux getrandom() standardně čeká na inicializaci zdroje urandom. S GRND_NONBLOCK může místo čekání vrátit EAGAIN. Po inicializaci má požadavek nejvýše 256 bajtů ze zdroje urandom záruku úplného čtení bez přerušení signálem; větší požadavky tuto záruku nemají. Aplikace musí respektovat návratový stav. [Linux getrandom(2) — Initialization and return behavior]

Web Crypto getRandomValues() plní podporované celočíselné pole kryptograficky silnými hodnotami; při velikosti nad 65536 bajtů vyvolá QuotaExceededError. Specifikace pro vytváření klíčů doporučuje generateKey(). Existence tohoto rozhraní neověřuje důvěryhodnost stránky ani nechrání tajemství před kódem, který k němu má přístup. [W3C Web Crypto — getRandomValues and key generation]

BIP39 nejprve kóduje 128 až 256 bitů počáteční entropie s odvozeným kontrolním součtem. Teprve ze slov a případné passphrase odvozuje pomocí PBKDF2 512bitový seed. Kontrolní součet ani delší odvozený výstup neopraví předvídatelný vstup; slova si nelze vybírat jako náhradu náhodného generování. [BIP39 — Initial entropy and mnemonic-to-seed derivation]

Deterministický generátor potřebuje chráněný stav a správnou inicializaci. NIST SP 800-90A rozlišuje vytvoření instance, generování, nové zasetí a zrušení instance. Obnova po prozrazení stavu vyžaduje odpovídající mechanismus a čerstvou entropii neznámou útočníkovi; pouhé další volání není obecnou zárukou zotavení. [NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseeding]

Kontrola má popsat konkrétní zdroj, algoritmus, inicializaci, rozhraní a chování při chybě v posuzované verzi. Označení hardwarový či offline samo tento řetězec nedokládá. Zdrojové standardy vysvětlují požadavky na generování; nejsou certifikátem konkrétní peněženky ani ochranou proti následnému úniku její zálohy. [NIST SP 800-90C — RBG constructions] [RFC 4086 — Unpredictability and weak inputs]

Pro nejúplnější obraz čtěte toto heslo společně s Cryptographic Entropy, CSPRNG, Seed Generation, Brute Force Search Space. Opačným směrem na něj odkazují také CSPRNG, Deterministic RNG, True Random Number Generator, Seed Generation.

DOC · 001NIST SP 800-90C — RBG constructionsSpecifikace ↗DOC · 002RFC 4086 — Unpredictability and weak inputsSpecifikace ↗DOC · 003NIST SP 800-90B — Source health and failure handlingSpecifikace ↗DOC · 004Linux getrandom(2) — Initialization and return behaviorDokumentace ↗DOC · 005W3C Web Crypto — getRandomValues and key generationSpecifikace ↗DOC · 006BIP39 — Initial entropy and mnemonic-to-seed derivationSpecifikace ↗DOC · 007NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseedingSpecifikace ↗
Primární zdroje · Nejde o investiční doporučení