Rdrand (také RDRAND ) je instrukce pro procesory x86 pro generování náhodného čísla pomocí interního generátoru náhodných čísel . [1] Rdrand je volitelné rozšíření instrukční sady x86-64 a IA-32 . Dostupné na procesorech Intel počínaje architekturou Ivy Bridge , na procesorech AMD počínaje modelem Ryzen . Tento generátor náhodných čísel vyhovuje bezpečnostním a kryptografickým standardům , jako jsou NIST SP800-90 , FIPS 140-2 a ANSI X9.82 . [jeden]
Podle některých názorů může jít o příklad kleptografie (záměrné zavedení kryptograficky slabého prvku) [2] . Zavedení zranitelnosti je hypoteticky možné např. změnou typu dopingu v jednom z tranzistorů (je nutná úprava minimálně dvou litografických masek) [3]
Intel Secure Key , také známý jako Bull Mountain , je kódové jméno společnosti Intel pro instrukci rdrand a hardwarový generátor náhodných čísel (RNG), který ji implementuje. [1] Intel je nazývá RNG a „Digital Random Number Generator“. Generátor využívá zdroj entropie zabudovaný v procesoru .
Syntaxe příkazu shromáždění: rdrand reg . Zde reg je operand instrukce, což je obecný registr: 16, 32 nebo 64bitový. Druhá možnost je možná pouze v režimu 64bitového procesoru.
RDRANDTuto instrukci můžete použít ke kontrole podpory procesoru CPUID. Když je podporováno, bit 30 registru ECX je nastaven po volání funkce 01Hinstrukce CPUID. Operační kód (kód strojové instrukce) RDRAND: 0x0F 0xC7.
1. Instrukce rdrand vygeneruje náhodné binární celé číslo příslušné velikosti a umístí ho do registru operandů.
2. Pokud byla operace úspěšná, nastaví se příznak přenosu cf, jinak se vymaže.
Dva páry 256bitových čísel získaných ze zdroje hardwarové entropie jsou předány hardwarovému bloku, který provádí kryptografický algoritmus AES v režimu CBC-MAC. Výsledná 256bitová hodnota se použije k inicializaci PRNG (CTR_DRBG ze sekce 10.2.1 standardu NIST SP 800-90, pomocí AES) [4]
Kompilátor C ++ obsažený v MS Visual Studio 2013 podporuje RDRANDa _rdrand16_step(unsigned short *random_val). _rdrand32_step(unsigned int *random_val)Pokud bylo možné vygenerovat náhodné číslo pomocí hardwarového generátoru procesoru, funkce vrací 1, v opačném případě 0. Samotné vygenerované náhodné číslo se přenese do paměti ukazatelem.