RdRand

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 4. listopadu 2019; kontroly vyžadují 8 úprav .

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]

Konvenční názvy

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 .

Popis

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.

Algoritmus

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.

Způsob generování

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]

Použití v C++

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.

Viz také

Poznámky

  1. 1 2 3 Intel Digital Random Number Generator (DRNG): Software Implementation Guide, Revize 1.1 (PDF)  (odkaz není dostupný) . Intel Corporation (7. srpna 2012). Získáno 25. listopadu 2012. Archivováno z originálu 18. května 2013.
  2. Torvalds sestřelí výzvu, aby vytrhl 'backdoored' Intel RdRand v kryptoamerickéLinuxu
  3. Bruce Schneier , Tajně manipulace s počítačovými čipy Archivováno 16. září 2013 na Wayback Machine // Blog Schneier o bezpečnosti, 16. září 2013: ""Stealthy Dopant-Level Hardware Trojans." V podstatě můžete manipulovat s logickou bránou buď přilepená, nebo přilepená změnou dopingu jednoho tranzistoru. Tento druh sabotáže nelze zjistit funkčním testováním nebo optickou kontrolou. A lze ji provést při výrobě masky – velmi pozdě v procesu návrhu.“
  4. Průvodce implementací softwaru Intel Digital Random Number Generator (DRNG) Archivováno 12. ledna 2014 na Wayback Machine // Gael Hofemeier, 8. 8. 2012]

Literatura

Odkazy