RdRand

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 4 noiembrie 2019; verificările necesită 8 modificări .

Rdrand (de asemenea, RDRAND ) este o instrucțiune pentru procesoarele x86 pentru a genera un număr aleator folosind un generator intern de numere aleatoare . [1] Rdrand este o extensie opțională pentru set de instrucțiuni x86-64 și IA-32 . Disponibil pe procesoare Intel incepand cu arhitectura Ivy Bridge , pe procesoare AMD incepand cu modelul Ryzen . Acest generator de numere aleatorii respectă standardele de securitate și criptografice precum NIST SP800-90 , FIPS 140-2 și ANSI X9.82 . [unu]

După unele opinii, poate fi un exemplu de cleptografie (introducerea deliberată a unui element slab criptografic) [2] . Introducerea vulnerabilității este posibilă ipotetic, de exemplu, prin schimbarea tipului de dopaj la unul dintre tranzistori (este necesară modificarea a cel puțin două măști litografice) [3]

Denumiri convenționale

Intel Secure Key , cunoscută și sub numele de Bull Mountain , este numele de cod Intel pentru instrucțiunea rdand și pentru generatorul hardware de numere aleatorii (RNG) care o implementează. [1] Intel le numește RNG și „Digital Random Number Generator”. Generatorul folosește sursa de entropie încorporată în procesor .

Descriere

Sintaxa comenzii de asamblare: rdrand reg . Aici reg este operandul instrucțiunii, care este un registru de uz general: 16, 32 sau 64 de biți. Ultima opțiune este posibilă numai în modul procesor pe 64 de biți.

RDRANDPuteți utiliza instrucțiunile pentru a verifica compatibilitatea procesorului CPUID. Când este acceptat, bitul 30 al registrului ECX este setat după un apel de funcție la 01Hinstrucțiunea CPUID. Opcode (cod de instrucțiuni al mașinii) RDRAND: 0x0F 0xC7.

Algoritm

1. Instrucțiunea rdrand generează un întreg binar aleator de dimensiunea corespunzătoare și îl plasează în registrul de operanzi.

2. Dacă operația a avut succes, indicatorul de transport cf este setat, în caz contrar șters.

Metoda de generare

Două perechi de numere de 256 de biți obținute din sursa de entropie hardware sunt transmise blocului hardware care execută algoritmul criptografic AES în modul CBC-MAC. Valoarea rezultată de 256 de biți este utilizată pentru a inițializa PRNG (CTR_DRBG din secțiunea 10.2.1 a standardului NIST SP 800-90, folosind AES) [4]

Utilizare în C++

Compilatorul C++ inclus în MS Visual Studio 2013 acceptă RDRANDși _rdrand16_step(unsigned short *random_val). _rdrand32_step(unsigned int *random_val)Dacă a fost posibil să se genereze un număr aleator folosind generatorul hardware al procesorului, funcția returnează 1, în caz contrar este returnat 0. Numărul aleator generat însuși este transferat în memorie prin pointer.

Vezi și

Note

  1. 1 2 3 Intel Digital Random Number Generator (DRNG): Ghid de implementare a software-ului, Revizia 1.1 (PDF)  (link nu este disponibil) . Intel Corporation (7 august 2012). Consultat la 25 noiembrie 2012. Arhivat din original la 18 mai 2013.
  2. ↑ Torvalds respinge apelul de a smulge Intel RdRand „cu ușă în spate” în criptomonedele criptograficLinux
  3. Bruce Schneier , Surreptitiously Tampering with Computer Chips Arhivat 16 septembrie 2013 la Wayback Machine // Blogul Schneier despre securitate, 16 septembrie 2013: „„Stealthy Dopant-Level Hardware Troians.” Practic, puteți modifica o poartă logică pentru fie blocat, fie blocat prin schimbarea dopajului unui tranzistor. Acest tip de sabotaj este nedetectabil prin testarea funcțională sau inspecția optică. Și se poate face la generarea măștii -- foarte târziu în procesul de proiectare"
  4. Ghid de implementare a software-ului Intel Digital Random Number Generator (DRNG) Arhivat 12 ianuarie 2014 la Wayback Machine // Gael Hofemeier, 08.08.2012]

Literatură

Link -uri