RdRand

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 4 de noviembre de 2019; las comprobaciones requieren 8 ediciones .

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]

Nombres convencionales

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 .

Descripción

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.

Algoritmo

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.

Método de generación

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]

Uso en C++

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.

Véase también

Notas

  1. 1 2 3 Intel Digital Random Number Generator (DRNG): Guía de implementación de software, revisión 1.1 (PDF)  (enlace no disponible) . Corporación Intel (7 de agosto de 2012). Consultado el 25 de noviembre de 2012. Archivado desde el original el 18 de mayo de 2013.
  2. Torvalds derriba la llamada para sacar Intel RdRand 'backdoor' en cryptoLinux
  3. Bruce Schneier , Manipulación subrepticia de chips informáticos Archivado el 16 de septiembre de 2013 en Wayback Machine // Blog de Schneier sobre seguridad, 16 de septiembre de 2013: "" Troyanos de hardware de nivel de dopaje sigilosos". Básicamente, puede manipular una puerta lógica para ser atascado o atascado cambiando el dopaje de un transistor. Este tipo de sabotaje es indetectable mediante pruebas funcionales o inspección óptica. Y se puede hacer en la generación de máscaras, muy tarde en el proceso de diseño".
  4. Guía de implementación del software Intel Digital Random Number Generator (DRNG) Archivado el 12 de enero de 2014 en Wayback Machine // Gael Hofemeier, 08/08/2012]

Literatura

Enlaces