RDRAND
(per "llegir aleatòriament"; conegut com Intel Secure Key Technology,[1] nom en clau Bull Mountain [2]) é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.[3] 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 [note 1] i forma part de les arquitectures de conjunt d'instruccions Intel 64 i IA-32).[5]
El generador de números aleatoris compleix amb els estàndards de seguretat i criptogràfics com NIST SP 800-90A,[6] FIPS 140-2 i ANSI X9.82.[7] 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.[8]
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 [9] i les CPU AMD Zen.[10]
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
.[11] Els processadors AMD es comprova la funció mitjançant la mateixa prova.[12] 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
.[13]
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.[14]
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,[15] que va rebre el nom en clau "Bull Mountain" durant el desenvolupament.[16] 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
.[15] [16] 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,[17] 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,[18] 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 es requereix seguretat criptogràfica, un programari PRNG com Xorshift sol ser més ràpid.
É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.[19][20]