Tu sú vecné/logické chyby a nepresnosti v texte (stručne, podľa tém):
1. Popletené príznaky CPU
Autor dvakrát nazýva CF „príznakom pretečenia“. CF je carry flag, pretečenie je OF. To je faktická chyba pri popise stavových príznakov x86.
2. Správanie RDRAND pri zlyhaní
Text tvrdí, že „ak inštrukcia neprebehne, register sa vynuluje a CF=0“. Architektúra x86 uvádza: CF=0 znamená, že sa nevrátila platná hodnota; obsah cieľového registra je nedefinovaný (nie garantovane nulový).
Ak procesor inštrukciu nepodporuje, nedeje sa „vynulovanie“ – vyvolá sa #UD (invalid opcode). Preto je zle miešať „neúspech kvôli nedostupným dátam“ s „nepodporovanou inštrukciou“.
3. Mylné tvrdenie o „reštarte po 511 cykloch“
Pasáž „generátor je vždy po maximálne 511 cykloch reštartovaný“ je nesprávna. Intel DRNG používa CTR-DRBG, ktorý sa periodicky reseeduje podľa počtu vygenerovaných hodnôt, nie „taktovacích cyklov CPU“. Číslo 511/512 sa vzťahuje na počet výstupov (blokov) medzi reseedmi, nie cykly.
4. „Jediný senzor tepelného šumu“ a „zdieľanie medzi všetkými jadrami“
Text kategoricky tvrdí, že je k dispozícii iba jediný senzor a ten sa delí medzi všetky jadrá, preto je RDSEED „pomalý“. Intel dokumentácia popisuje viacstupňový hardvérový entropický reťazec a kondicionovanie; implementačné detaily (počet senzorov, per-core/per-package) nie sú takto zjednodušene garantované. Toto je prinajmenšom nepodložené zovšeobecnenie.
5. „RDSEED vracia skutočne náhodné bity“
Presnejšie: RDSEED vracia kondicionované full-entropy (FIPS/NIST) bity z hardvérového zdroja (po prechode cez kondicionér). Nazývať to bez kvalifikácie „skutočne náhodné“ je terminologicky nepresné; ide o výstup po kryptografickom spracovaní entropie.
6. Detekcia a reakcia na nepodporované inštrukcie
Časť o CPUID je OK (RDRAND = leaf 1 ECX bit 30), ale text neskôr naznačuje, že „ak nie je podporovaná“, jednoducho sa vráti nula/CF=0. Správne: ak sa pokúsite vykonať nepodporovanú inštrukciu bez kontroly CPUID, dostanete #UD.
7. GCC builtins a prepínače
Autor tvrdí, že je nutné -mrdrnd, inak builtins neexistujú. V praxi stačí aj -march=… s RDRAND (alebo cieľ so zahrnutou inštrukciou); -mrdrnd je jedna z ciest, nie jediná. Formulácia je príliš kategorická.
8. Nesúlad „sekvencia bude vždy iná“
„Prakticky isté, že nikdy nezískate rovnakú sekvenciu“ je prehnané. Pravdepodobnosť duplicity je zanedbateľná, nie nulová. Ide o logické zveličenie.
9. Nesúlad názvov/typos
Viackrát sa objaví preklep RDRND namiesto RDRAND.
V kap. 16 sa testuje súbor random.bit, no predtým sa generoval random.bin. To je nekonzistentné.
10. Chyby/nekorektnosti v ukážkovej ASM
id_string: resb 8, no následne sa ukladá 12 bajtov (EBX, EDX, ECX) a tlačí sa 12 znakov buffer overflow.
V poznámkach sa CF opäť volá „príznak pretečenia“.
V časti s LOOP je síce upozornené na modifikáciu ECX a použitie push/pop, to je správne; inak OK.
11. Kódovanie inštrukcie a tabuľka
Tabuľka uvádza „NFx 0F C7 /6“ – označenie NFx nie je štandardná notácia; nepôsobí ako vecná chyba, ale mätie.
12. Zámena „assembler“ vs. „vyššie jazyky“ pri RDRAND/privilegiách
Veta „ak je podporovaná, malo by byť volanie úspešné (nevyžaduje privilégiá)“ je správna, ale následné zovšeobecnenie, že „ak prebehne v poriadku, CF=1; v opačnom prípade register vynulovaný“ je (opäť) nesprávne – viď body 2 a 3.
13. Randomness testy – interpretácia
Uvádza sa, že neprešiel iba random_excursion_test. SP 800-22 má známe limity a výsledky sa môžu podstatne líšiť podľa implementácie, veľkosti vzorky a endianity; autor to berie ako definitívny verdikt bez diskusie o parametroch (napr. --be prepínač, veľkosť okna), čo je metodologicky slabé.
Porovnanie s xorshift32 je korektné, ale „horšie (podľa očakávania)“ bez kvantifikácie a diskusie o špecifikách testov je zjednodušené.
Zhrnutie najdôležitejších faktických chýb:
CF ≠ overflow flag (zásadná chyba).
Pri CF=0 je hodnota nedefinovaná, nie nulová; nepodpora #UD.
„511 cyklov“ je nesprávne; reseed sa viaže na počet výstupov, nie CPU cykly.
ASM ukážka prepisuje 12 bajtov do 8-bajtového bufferu.
Zovšeobecnenie o „jedinom senzore“ a absolútne tvrdenia o „skutočne náhodnom“ sú nepresné.
Ináč skvelý článok :-)
NFx není nestandardní, je to jen nová notace, kterou intel začal používat.
Příklad:
NFx REX.W + 0F C7 /6 RDRAND r64
V podstatě to říká, že tato instrukce nepoužívá F2/F3 prefix. Při použití toho prefixu buď #UD a nebo to bude jiná instrukce. Hold dochází instrukce a je potřeba definovat co se ještě dá použít a co už ne :)
Stejně tak třeba NP (no-prefix), atd...
"„Prakticky isté, že nikdy nezískate rovnakú sekvenciu“ je prehnané. Pravdepodobnosť duplicity je zanedbateľná, nie nulová. Ide o logické zveličenie." - no on se generuje 256 bitovej seed. Takze dokonce by se dalo rict: je to prakticky jiste, mnohem (MNOHEM, o 2^128 vice) jistejsi, nez ze dostanete dva stejny UUID (o kterych se predpoklada, ze kolize prakticky nenastanou). Ja chapu slovo "prakticky jiste" jako ze s tim urcite neni zapotrebi pocitat.