# RDRAND

RDRAND (per "llegir aleatòriament"; conegut com Intel Secure Key Technology, nom en clau Bull Mountain) és una instrucció per retornar números aleatoris des d'un generador de números aleatoris de maquinari Intel on-chip que ha estat sembrat per una font d'entropia en xip. Intel va introduir la funció al voltant de 2012 i AMD va afegir suport per a la instrucció el juny de 2015. (RDRAND està disponible en processadors Ivy Bridge i forma part de les arquitectures de conjunt d'instruccions Intel 64 i IA-32).
El generador de números aleatoris compleix amb els estàndards de seguretat i criptogràfics com NIST SP 800-90A, FIPS 140-2 i ANSI X9.82. Intel també va demanar a Cryptography Research Inc. que revisés el generador de números aleatoris el 2012, cosa que va donar lloc a l'article Analysis of Intel's Ivy Bridge Digital Random Number Generator.
RDSEED és similar a RDRAND i proporciona accés de nivell inferior al maquinari que genera entropia. El generador RDSEED i les instruccions del processador rdseed estan disponibles amb les CPU Intel Broadwell i les CPU AMD Zen.

## Visió general

La instrucció CPUID es pot utilitzar tant a CPU AMD com Intel per comprovar si la instrucció RDRAND és compatible. Si és així, el bit 30 del registre ECX s'estableix després de cridar la funció estàndard CPUID 01H. Els processadors AMD es comprova la funció mitjançant la mateixa prova. La disponibilitat RDSEED es pot comprovar a les CPU Intel d'una manera similar. Si s'admet RDSEED, el bit 18 del registre EBX s'estableix després de cridar la funció estàndard CPUID 07H.
El codi operatiu per RDRAND és 0x0F 0xC7, seguit d'un byte ModRM que especifica el registre de destinació i, opcionalment, combinat amb un prefix REX en mode de 64 bits.
Intel Secure Key és el nom d'Intel tant per a la instrucció RDRAND com per a la implementació de maquinari del generador de números aleatoris (RNG) subjacent, que va rebre el nom en clau "Bull Mountain" durant el desenvolupament. Intel anomena el seu RNG un "generador de números aleatoris digitals" o DRNG. El generador pren parells de mostres d'entropia en brut de 256 bits generades per la font d'entropia del maquinari i les aplica a un condicionador Advanced Encryption Standard (AES) (en mode CBC-MAC) que les redueix a una única mostra d'entropia condicionada de 256 bits. Un generador de bits aleatoris determinista anomenat CTR DRBG definit a NIST SP 800-90A és sembrat per la sortida del condicionador, proporcionant números aleatoris criptogràficament segurs a les aplicacions que els sol·liciten mitjançant la instrucció RDRAND. El maquinari emetrà un màxim de 511 mostres de 128 bits abans de canviar el valor inicial. L'ús de l'operació RDSEED proporciona accés a les mostres condicionades de 256 bits de l'AES-CBC-MAC.
La instrucció RDSEED es va afegir a Intel Secure Key per sembrar un altre generador de números pseudoaleatoris, disponible a les CPU Broadwell. La font d'entropia per a la instrucció RDSEED s'executa de manera asíncrona en un circuit autotemporal i utilitza soroll tèrmic dins del silici per produir un flux aleatori de bits a una velocitat de 3. GHz, més lent que el 6,4 efectiu Gbit/s que es poden obtenir des de RDRAND (ambdues taxes es comparteixen entre tots els nuclis i fils). La instrucció RDSEED està pensada per sembrar un programari PRNG d'amplada arbitrària, mentre que la RDRAND està pensada per a aplicacions que només requereixen números aleatoris d'alta qualitat. Si no cal seguretat criptogràfica, un programari PRNG com Xorshift sol ser més ràpid.

## Aplicacions

És una opció per generar números aleatoris criptogràficament segurs mitjançant RDRAND i RDSEED a OpenSSL, per ajudar a assegurar les comunicacions.
Es va avaluar l'aplicació científica de RDRAND en un simulador de Monte Carlo, centrant-se en el rendiment i la reproductibilitat, en comparació amb altres generadors de nombres aleatoris. Va conduir a la conclusió que l'ús RDRAND a diferència de Mersenne Twister no proporciona resultats diferents, sinó pitjor rendiment i reproductibilitat.

## Notes

* ↑ En algunes versions d'Ivy Bridge, a causa d'un error, la instrucció RDRAND provoca una excepció d'instrucció il·legal.

## Referències

* ↑ «What is Intel® Secure Key Technology?» (en anglès). Intel. [Consulta: 23 setembre 2020].
* ↑ Hofemeier, Gael. «Find out about Intel's new RDRAND Instruction.» (en anglès). Intel Developer Zone Blogs, 22-06-2011. [Consulta: 30 desembre 2013].
* ↑ «Intel Digital Random Number Generator (DRNG): Software Implementation Guide, Revision 1.1» (en anglès). Intel Corporation, 07-08-2012. [Consulta: 25 novembre 2012].
* ↑ Desktop 3rd Generation Intel Core Processor Family, Specification Update. Intel Corporation, gener 2013.
* ↑ «AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions» (en anglès). AMD Developer Guides, Manuals & ISA Documents, 01-06-2015. [Consulta: 16 octubre 2015].
* ↑ Barker, Elaine; Kelsey, John "Recommendation for Random Number Generation Using Deterministic Random Bit Generators", 1-2012. DOI: 10.6028/NIST.SP.800-90A [Consulta: 16 setembre 2013].
* ↑ «Intel Digital Random Number Generator (DRNG): Software Implementation Guide, Revision 1.1» (en anglès). Intel Corporation, 07-08-2012. [Consulta: 25 novembre 2012].
* ↑ Hamburg, Mike. «Analysis of Intel's Ivy Bridge Digital Random Number Generator» (en anglès). Cryptography Research, Inc., 12-03-2012. Arxivat de l'original el 2014-12-30. [Consulta: 21 agost 2015].
* ↑ Hofemeier, Gael. «Introduction to Intel AES-NI and Intel SecureKey Instructions» (en anglès). Intel Developer Zone. Intel, 26-07-2012. [Consulta: 24 octubre 2015].
* ↑ «AMD Starts Linux Enablement On Next-Gen "Zen" Architecture - Phoronix» (en anglès). www.phoronix.com. [Consulta: 25 octubre 2015].
* ↑ «Volume 1, Section 7.3.17, 'Random Number Generator Instruction'» (en anglès). Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C. Intel Corporation, 01-06-2013. [Consulta: 24 juny 2013].
* ↑ «AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions» (en anglès). AMD, 01-06-2015. [Consulta: 15 octubre 2015].
* ↑ «Volume 1, Section 7.3.17, 'Random Number Generator Instruction'» (en anglès). Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C. Intel Corporation, 01-06-2013. [Consulta: 25 octubre 2015].
* ↑ «Intel® Digital Random Number Generator (DRNG) Software Implementation Guide» (en anglès). Software.intel.com. [Consulta: 30 gener 2014].
* 1 2 «Intel Digital Random Number Generator (DRNG): Software Implementation Guide, Revision 1.1» (en anglès). Intel Corporation, 07-08-2012. [Consulta: 25 novembre 2012].
* 1 2 Taylor, Greg; Cox, George IEEE Spectrum, 9-2011.
* ↑ John Mechalas. «The Difference Between RDRAND and RDSEED» (en anglès). software.intel.com. Intel Corporation, 01-11-2012. [Consulta: 1r gener 2014].
* ↑ Mechalas, John. «Intel Digital Random Number Generator (DRNG) Software Implementation Guide, Section 3.2.1 Entropy Source (ES)» (en anglès). Intel Software. Intel. [Consulta: 18 febrer 2015].
* ↑ Route, Matthew American Astronomical Society Meeting Abstracts #234, 234, 2019. Bibcode: 2019AAS...23420701R.
* ↑ Route, Matthew The Astrophysical Journal, 845, 1, 10-08-2017, pàg. 66. arXiv: 1707.02212. Bibcode: 2017ApJ...845...66R. DOI: 10.3847/1538-4357/aa7ede [Consulta: lliure].