Rdrand (también RDRAND ) es una instrucción para que los procesadores x86 generen un número aleatorio utilizando un generador interno de números aleatorios . [1] Rdrand es una extensión opcional del conjunto de instrucciones x86-64 e IA-32 . Disponible en procesadores Intel a partir de la arquitectura Ivy Bridge , en procesadores AMD a partir del modelo Ryzen . Este generador de números aleatorios cumple con estándares criptográficos y de seguridad como NIST SP800-90 , FIPS 140-2 yANSIX9.82 . [una]
Según algunas opiniones, puede ser un ejemplo de cleptografía (introducción deliberada de un elemento criptográficamente débil) [2] . La introducción de la vulnerabilidad es hipotéticamente posible, por ejemplo, cambiando el tipo de dopaje en uno de los transistores (se requiere la modificación de al menos dos máscaras litográficas) [3]
Intel Secure Key , también conocida como Bull Mountain , es el nombre en clave de Intel para la instrucción rdrand y el generador de números aleatorios (RNG) de hardware que la implementa. [1] Intel los llama RNG y "Generador digital de números aleatorios". El generador utiliza la fuente de entropía integrada en el procesador .
Sintaxis del comando de ensamblaje: rdrand reg . Aquí reg es el operando de instrucción, que es un registro de propósito general: 16, 32 o 64 bits. La última opción solo es posible en el modo de procesador de 64 bits.
RDRANDPuede utilizar las instrucciones para comprobar la compatibilidad con el procesador CPUID. Cuando se admite, el bit 30 del registro ECX se establece después de una llamada de función a 01Hla instrucción CPUID. Opcode (código de instrucción de máquina) RDRAND: 0x0F 0xC7.
1. La instrucción rdrand genera un entero binario aleatorio del tamaño apropiado y lo coloca en el registro de operandos.
2. Si la operación tuvo éxito, se establece la bandera de acarreo cf; de lo contrario, se borra.
Dos pares de números de 256 bits obtenidos de la fuente de entropía del hardware se pasan al bloque de hardware que ejecuta el algoritmo criptográfico AES en modo CBC-MAC. El valor de 256 bits resultante se usa para inicializar el PRNG (CTR_DRBG de la sección 10.2.1 del estándar NIST SP 800-90, usando AES) [4]
RDRANDEl compilador de C++ incluido en MS Visual Studio 2013 es compatible con _rdrand16_step(unsigned short *random_val)y _rdrand32_step(unsigned int *random_val). Si fue posible generar un número aleatorio utilizando el generador de hardware del procesador, la función devuelve 1, de lo contrario, devuelve 0. El número aleatorio generado en sí mismo se transfiere a la memoria mediante un puntero.