True Random Number Generator, zkráceně TRNG, získává nové nepředvídatelné vstupy měřením fyzického procesu. Liší se tím od generátoru, který další hodnoty pouze počítá z uloženého stavu. V praxi mohou oba spolupracovat. Slovo „true“ v názvu ale není zárukou kvality: i fyzický zdroj může být špatně navržený nebo porouchaný.
Obvod může měřit drobné elektrické výkyvy a převádět je na čísla. Důležité je, kolik z naměřeného výsledku nedokáže útočník předpovědět. Nestačí jen rychle vyrobit mnoho dat. NIST SP 800-90B proto posuzuje konkrétní šumový zdroj, způsob jeho měření, případnou úpravu dat a kontroly funkčnosti. Název použitého fyzikálního jevu takové posouzení nenahrazuje. [1]
Zdroj může například dávat nuly častěji než jedničky. Zpracování zvané conditioning pomáhá tuto nerovnoměrnost omezit a soustředit dostupnou entropii, tedy nejistotu z pohledu útočníka, do kratšího výstupu. Chybějící nejistotu ale nevytvoří. Proto NIST SP 800-90B váže uznanou výstupní entropii na vstup a použitý postup. Ani hash, vypočtený otisk dat, nedokazuje nepředvídatelnost původních hodnot: ze známého vstupu lze znovu spočítat stejný otisk. [1]
Pokud zdroj začne stále vracet stejnou hodnotu, zařízení to nesmí přehlédnout. NIST SP 800-90B používá Repetition Count Test ke sledování opakování a Adaptive Proportion Test ke sledování neobvyklých četností. Tyto kontroly hledají určité poruchy; neodhalí automaticky každý útok nebo chybu. Při zjištěné trvalé poruše nemá zdroj dál vydávat výstup jako při běžném provozu. [1]
Samotná přítomnost TRNG nestačí k závěru, že je peněženka bezpečná. Důležité je i to, jak její konkrétní verze získaná data použije a co udělá při chybě. NIST SP 800-90C proto řeší zdroje společně s navazujícími generátory. Posouzení jedné součástky není posouzením celé peněženky. A ani výborný zdroj náhodnosti neochrání zálohu, kterou později někomu prozradíte. [4]
Dlouhý záznam ze zapnutého zařízení ukáže jinou část jeho chování než opakované vypnutí a spuštění. NIST SP 800-90B proto zahrnuje také restartové testy. Hodnocení musí odpovídat konkrétnímu zdroji a jeho provozním podmínkám. Výsledek pro jeden vzorek nelze automaticky přenést na všechna zařízení nebo prostředí. Změna firmwaru, tedy programu uvnitř zařízení, může také vyžadovat nové posouzení. [1]
V technické dokumentaci se setkáte s příkazy RDRAND a RDSEED. Intel je popisuje v průvodci ke svému hardwarovému generátoru náhodných čísel, označovanému DRNG. RDRAND poskytuje výsledky deterministického generátoru, který dál počítá z vnitřního stavu. RDSEED dodává zpracovanou entropii pro inicializaci, tedy vytvoření výchozího stavu generátoru. Obě cesty mohou začínat u fyzického zdroje; ani jedna tím však neslibuje přímé čtení neupraveného šumu. [2]
Procesor nemusí mít výsledek připravený při každém požadavku. Intel proto u RDRAND i RDSEED vyžaduje kontrolu stavového příznaku CF: 1 znamená, že výsledek je dostupný, 0 že dostupný není. Nestačí se podívat, zda je v cílovém registru, malém úložišti procesoru, číselná nula. Program musí číst příznak úspěchu. To, že procesor příkaz podporuje, ještě neznamená, že konkrétní požadavek uspěl. [2]
V Linuxu umožňuje rozhraní hw_random číst hardwarový zdroj přes /dev/hwrng podobně jako ze souboru. Jeho dokumentace ale výslovně upozorňuje, že toto rozhraní samo data neověřuje testy kvality. Vadný nebo pozměněný hardware tak může vracet chybné údaje, které aplikace přesto přečte. Úspěšné čtení proto není důkazem dostatečné entropie. Posoudit je třeba zdroj i to, jak program s jeho výsledky zachází. [3]
Pro nejúplnější obraz čtěte toto heslo společně s Cryptographic Entropy, Random Number Generator, CSPRNG, Entropy Mixing. Opačným směrem na něj odkazují také Entropy Mixing.