RDRAND(de "read random") es una instrucción para devolver números aleatorios desde un generador de números aleatorios de hardware integrado en el chip de Intel que ha sido inicializado por una fuente de entropía integrada en el chip. [ 1 ] También se conoce como Intel Secure Key Technology , [ 2 ] con nombre en clave Bull Mountain . [ 3 ] Intel introdujo la función alrededor de 2012, y AMD agregó soporte para la instrucción en junio de 2015. Está disponible en los procesadores Ivy Bridge [ a ] y forma parte de las arquitecturas de conjunto de instrucciones Intel 64 e IA-32 . [ 5 ]RDRAND
El generador de números aleatorios cumple con los estándares de seguridad y criptográficos como NIST SP 800-90A , [ 6 ] FIPS 140-2 y ANSI X9.82 . [ 1 ] Tras una solicitud de Intel, Cryptography Research Inc. publicó una investigación sobre RDRAND en el artículo Análisis del generador de números aleatorios digitales Ivy Bridge de Intel . [ 7 ]
RDSEEDes similar a RDRANDy proporciona acceso de nivel inferior al hardware generador de entropía. La RDSEEDinstrucción del generador y del procesador rdseedestá disponible con las CPU Intel Broadwell [ 8 ] y las CPU AMD Zen . [ 9 ]
Descripción general
La CPUIDinstrucción se puede usar tanto en CPU AMD como Intel para comprobar si la RDRANDinstrucción es compatible. Si lo es, el bit 30 del registro ECX se activa después de llamar a la función estándar CPUID 01H. [ 10 ] Los procesadores AMD se comprueban para la característica usando la misma prueba. [ 11 ]RDSEED La disponibilidad se puede comprobar en CPU Intel de manera similar. Si RDSEEDes compatible, el bit 18 del registro EBX se activa después de llamar a la función estándar CPUID 07H. [ 12 ]
El código de operación para RDRANDes 0x0F 0xC7, seguido de un byte ModRM que especifica el registro de destino y opcionalmente combinado con un prefijo REX en modo de 64 bits. [ 13 ]
Intel Secure Key es el nombre que Intel le da tanto a la RDRANDinstrucción como a la implementación de hardware del generador de números aleatorios (RNG) subyacente, [ 1 ] que fue nombrado en clave "Bull Mountain" durante el desarrollo. [ 14 ] Intel llama a su RNG "generador digital de números aleatorios" o DRNG. El generador toma pares de muestras de entropía bruta de 256 bits generadas por la fuente de entropía de hardware y las aplica a un acondicionador del Estándar de Cifrado Avanzado (AES) (en modo CBC-MAC ) que las reduce a una única muestra de entropía acondicionada de 256 bits. Un generador determinista de bits aleatorios llamado CTR DRBG definido en NIST SP 800-90A se inicializa con la salida del acondicionador, proporcionando números aleatorios criptográficamente seguros a las aplicaciones que los solicitan a través de la RDRANDinstrucción. [ 1 ] [ 14 ] El hardware emitirá un máximo de 511 muestras de 128 bits antes de cambiar el valor de la semilla. Mediante esta RDSEEDoperación se obtiene acceso a las muestras acondicionadas de 256 bits procedentes del AES-CBC-MAC.
La RDSEEDinstrucción se agregó a Intel Secure Key para inicializar otro generador de números pseudoaleatorios, [ 15 ] disponible en las CPU BroadwellRDSEED . La fuente de entropía para la instrucción se ejecuta de forma asíncrona en un circuito auto-sincronizado y utiliza el ruido térmico dentro del silicio para generar un flujo aleatorio de bits a una velocidad de 3 GHz, [ 16 ] más lento que los 6,4 Gbit/s efectivos que se pueden obtener de RDRAND(ambas velocidades se comparten entre todos los núcleos e hilos ). [ 17 ] La RDSEEDinstrucción está destinada a inicializar un PRNG de software de ancho arbitrario, mientras que RDRANDestá destinada a aplicaciones que simplemente requieren números aleatorios de alta calidad. Si no se requiere seguridad criptográfica, un PRNG de software como Xorshift suele ser más rápido. [ 18 ]
Actuación
En un procesador Intel Core i7-7700K de 4500 MHz (45 × 100 MHz) (microarquitectura Kaby Lake-S), una sola instrucción OR tarda 110 ns, o 463 ciclos de reloj, independientemente del tamaño del operando (16/32/64 bits). Este número de ciclos de reloj se aplica a todos los procesadores con microarquitectura Skylake o Kaby Lake . En los procesadores con microarquitectura Silvermont , cada instrucción tarda alrededor de 1472 ciclos de reloj, independientemente del tamaño del operando; y en los procesadores Ivy Bridge tarda hasta 117 ciclos de reloj. [ 19 ] RDRANDRDSEED RDRAND
En una CPU AMD Ryzen, cada una de las instrucciones requiere alrededor de 1200 ciclos de reloj para un operando de 16 o 32 bits, y alrededor de 2500 ciclos de reloj para un operando de 64 bits. [ 19 ]
Un simulador astrofísico de Monte Carlo examinó el tiempo para generar 10⁷ números aleatorios de 64 bits usando RDRANDen un procesador Intel i7-3740 QM de cuatro núcleos. Encontraron que una implementación en C de RDRANDse ejecutaba aproximadamente 2 veces más lento que el generador de números aleatorios predeterminado en C, y aproximadamente 20 veces más lento que el Mersenne Twister . Aunque RDRANDse ha construido un módulo de Python de, se encontró que era 20 veces más lento que el generador de números aleatorios predeterminado en Python, [ 20 ] aunque no se puede hacer una comparación de rendimiento entre un PRNG y un CSPRNG .
Una actualización de microcódigo publicada por Intel en junio de 2020, diseñada para mitigar la vulnerabilidad CrossTalk (véase la sección de problemas de seguridadRDRAND a continuación), afecta negativamente al rendimiento debido RDSEEDa controles de seguridad adicionales. En los procesadores con las mitigaciones aplicadas, cada instrucción afectada genera latencia adicional y la ejecución simultánea de RDRANDentre RDSEEDnúcleos se serializa de forma efectiva. Intel introdujo un mecanismo para flexibilizar estas comprobaciones de seguridad, reduciendo así el impacto en el rendimiento en la mayoría de los casos, pero los procesadores Intel no aplican esta flexibilización de seguridad por defecto. [ 21 ]
Compiladores
Visual C++ 2015 proporciona soporte de envoltura intrínseco para las funciones RDRANDy . [ 22 ] GCC 4.6+ y Clang 3.2+ proporcionan funciones intrínsecas para cuando se especifica en las banderas , [ 23 ] también configurando para permitir la compilación condicional . Las versiones más recientes proporcionan adicionalmente para envolver estas funciones integradas en funciones compatibles con la versión 12.1+ del compilador C de Intel. Estas funciones escriben datos aleatorios en la ubicación a la que apunta su parámetro y devuelven 1 si tienen éxito. [ 24 ]RDSEEDRDRAND-mrdrnd__RDRND__immintrin.h
Aplicaciones
Es una opción para generar números aleatorios criptográficamente seguros utilizando RDRANDOpenSSL RDSEED, para ayudar a proteger las comunicaciones.
Se evaluó la aplicación científica RDRANDen un simulador de Monte CarloRDRAND , centrándose en el rendimiento y la reproducibilidad, en comparación con otros generadores de números aleatorios. Se llegó a la conclusión de que usar en lugar de Mersenne Twister no proporciona resultados diferentes, pero sí un peor rendimiento y reproducibilidad. [ 25 ] [ 20 ]
Recepción
En septiembre de 2013, en respuesta a un artículo del New York Times que revelaba el esfuerzo de la NSA por debilitar el cifrado , [ 26 ] Theodore Ts'o publicó públicamente sobre el uso de RDRANDfor /dev/randomen el kernel de Linux : [ 27 ]
Me alegra mucho haber resistido la presión de los ingenieros de Intel para que
/dev/randomconfiara únicamente en laRDRANDinstrucción. Citando el artículo del New York Times [ 26 ] : "Para este año, el Proyecto de Habilitación de Sigint había encontrado maneras dentro de algunos de los chips de cifrado que codifican información para empresas y gobiernos, ya sea trabajando con fabricantes de chips para insertar puertas traseras..." Confiar únicamente en el generador de números aleatorios de hardware, que utiliza una implementación sellada dentro de un chip imposible de auditar, es una MALA idea.
Linus Torvalds desestimó las preocupaciones sobre el uso de RDRANDen el kernel de Linux y señaló que no se usa como la única fuente de entropía para /dev/random, sino que se usa para mejorar la entropía combinando los valores recibidos de RDRANDcon otras fuentes de aleatoriedad. [ 28 ] [ 29 ] Sin embargo, Taylor Hornby de Defuse Security demostró que el generador de números aleatorios de Linux podría volverse inseguro si se introduce una puerta trasera en la RDRANDinstrucción que apunta específicamente al código que lo usa. La implementación de prueba de concepto de Hornby funciona en un kernel de Linux sin modificar anterior a la versión 3.13. [ 30 ] [ 31 ] [ 32 ] El problema se mitigó en el kernel de Linux en 2013. [ 33 ]
Los desarrolladores cambiaron el kernel de FreeBSDRDRAND para que no utilizara directamente PadLock con el comentario "Para FreeBSD 10, vamos a retroceder y eliminar RDRANDlos backends de Padlock y alimentarlos a Yarrow en lugar de entregar su salida directamente a /dev/random . Todavía será posible acceder a los generadores de números aleatorios de hardware, es decir RDRAND, Padlock, etc., directamente mediante ensamblador en línea o utilizando OpenSSL desde el espacio de usuario, si es necesario, pero ya no podemos confiar en ellos." [ 28 ] [ 34 ] FreeBSD /dev/random utiliza Fortuna y RDRAND a partir de FreeBSD 11. [ 35 ]
Problemas de seguridad
El 9 de junio de 2020, investigadores de la Vrije Universiteit Amsterdam publicaron un ataque de canal lateral llamado CrossTalk ( CVE-2020-0543 ) que afectó RDRANDa varios procesadores Intel. [ 36 ] Descubrieron que las salidas del generador digital de números aleatorios (DRNG) de hardware se almacenaban en un búfer de preparación que se compartía entre todos los núcleos. La vulnerabilidad permitía que el código malicioso que se ejecutaba en un procesador afectado leyera RDRANDlos RDSEEDresultados de las instrucciones de una aplicación víctima que se ejecutaba en otro núcleo del mismo procesador, incluidas las aplicaciones que se ejecutaban dentro de los enclaves Intel SGX . [ 36 ] Los investigadores desarrollaron un exploit de prueba de concepto [ 37 ] que extrajo una clave ECDSA completa de un enclave SGX que se ejecutaba en un núcleo de CPU separado después de una sola operación de firma. [ 36 ] La vulnerabilidad afecta a escenarios donde el código no confiable se ejecuta junto con el código confiable en el mismo procesador, como en un entorno de alojamiento compartido.
Intel se refiere a la vulnerabilidad CrossTalk como muestreo de datos del búfer de registro especial (SRBDS). En respuesta a la investigación, Intel lanzó actualizaciones de microcódigo para mitigar el problema. El microcódigo actualizado garantiza que los accesos fuera del núcleo se retrasen hasta que las operaciones sensibles , específicamente las instrucciones , , y , se completen y el búfer de preparación se haya sobrescrito. [ 21 ] El ataque SRBDS también afecta a otras instrucciones, como las que leen MSR , pero Intel no aplicó protecciones de seguridad adicionales a ellas debido a preocupaciones de rendimiento y la menor necesidad de confidencialidad de los resultados de esas instrucciones. [ 21 ] Una amplia gama de procesadores Intel lanzados entre 2012 y 2019 se vieron afectados, incluidos procesadores de escritorio, móviles y de servidor. [ 38 ] [ 39 ] Las mitigaciones en sí mismas resultaron en impactos negativos en el rendimiento al usar las instrucciones afectadas, particularmente cuando se ejecutan en paralelo por aplicaciones multihilo, debido al aumento de la latencia introducido por las comprobaciones de seguridad y la serialización efectiva de las instrucciones afectadas en todos los núcleos. Intel introdujo una opción de exclusión voluntaria, configurable a través del MSR en cada procesador lógico, que mejora el rendimiento al deshabilitar las comprobaciones de seguridad adicionales para las instrucciones que se ejecutan fuera de un enclave SGX. [ 21 ] RDRANDRDSEEDEGETKEY IA32_MCU_OPT_CTRL
En octubre de 2025, Gregory Price de Meta Platforms descubrió un problema con la instrucción RDSEED en los procesadores AMD Zen 5. Debido a este problema, la instrucción RDSEED podía devolver un valor de 0 en lugar de un número aleatorio, indicando incorrectamente que la operación había tenido éxito. Esto solo afectaba a las versiones de 16 y 32 bits de la instrucción, no a la de 64 bits. [ 40 ] [ 41 ]
Véase también
Notas
Referencias
- 1 2 3 4 "Generador de números aleatorios digitales de Intel (DRNG): Guía de implementación de software, revisión 1.1" (PDF) . Intel Corporation . 7 de agosto de 2012. Consultado el 25 de noviembre de 2012 .
- ↑ "¿Qué es la tecnología Intel® Secure Key?" . Intel . Consultado el 23 de septiembre de 2020 .
- ↑ Hofemeier, Gael (22 de junio de 2011). "Infórmese sobre la nueva instrucción RDRAND de Intel" . Blogs de Intel Developer Zone . Consultado el 30 de diciembre de 2013 .
- ↑ Actualización de especificaciones de la familia de procesadores Intel Core de tercera generación para ordenadores de sobremesa (PDF) . Intel Corporation. Enero de 2013.
- ↑ "Manual del programador de la arquitectura AMD64, volumen 3: instrucciones de propósito general y del sistema" (PDF) . Guías, manuales y documentos ISA para desarrolladores de AMD . Junio de 2015. Consultado el 16 de octubre de 2015 .
- ↑ Barker, Elaine; Kelsey, John (enero de 2012). "Recomendación para la generación de números aleatorios mediante generadores de bits aleatorios deterministas" (PDF) . Instituto Nacional de Estándares y Tecnología . doi : 10.6028/NIST.SP.800-90A . Consultado el 16 de septiembre de 2013 .
- ↑ Hamburg, Mike; Kocher, Paul; Marson, Mark (12 de marzo de 2012). "Análisis del generador de números aleatorios digitales Ivy Bridge de Intel" (PDF) . Cryptography Research, Inc. Archivado del original (PDF) el 30 de diciembre de 2014. Consultado el 21 de agosto de 2015 .
- ↑ Hofemeier, Gael (26 de julio de 2012). "Introducción a las instrucciones Intel AES-NI e Intel SecureKey" . Zona de desarrolladores de Intel . Intel . Consultado el 24 de octubre de 2015 .
- ↑ "AMD inicia la habilitación de Linux en la arquitectura "Zen" de próxima generación - Phoronix" . www.phoronix.com . Consultado el 25 de octubre de 2015 .
- ↑ "Volumen 1, Sección 7.3.17, 'Instrucciones para el generador de números aleatorios'"" (PDF) . Manual del desarrollador de software de las arquitecturas Intel® 64 e IA-32 Volúmenes combinados: 1, 2A, 2B, 2C, 3A, 3B y 3C . Intel Corporation. Junio de 2013. pág. 177 . Consultado el 24 de junio de 2013 .
Todos los procesadores Intel que admiten la instrucción RDRAND indican la disponibilidad de la instrucción RDRAND informando CPUID.01H:ECX.RDRAND[bit 30] = 1
- ↑ "Manual del programador de la arquitectura AMD64, volumen 3: instrucciones de propósito general y del sistema" (PDF) . AMD. Junio de 2015. pág. 278. Consultado el 15 de octubre de 2015.
La compatibilidad con la instrucción RDRAND es opcional. En los procesadores que admiten la instrucción, CPUID Fn0000_0001_ECX[RDRAND] = 1
- ↑ "Volumen 1, Sección 7.3.17, 'Instrucciones para el generador de números aleatorios'"" (PDF) . Manual del desarrollador de software de las arquitecturas Intel® 64 e IA-32 Volúmenes combinados: 1, 2A, 2B, 2C, 3A, 3B y 3C . Intel Corporation. Junio de 2013. pág. 177 . Consultado el 25 de octubre de 2015 .
Todos los procesadores Intel que admiten la instrucción RDSEED indican la disponibilidad de la instrucción RDSEED mediante el informe CPUID.(EAX=07H, ECX=0H):EBX.RDSEED[bit 18] = 1
- ↑ "Guía de implementación de software del generador de números aleatorios digitales (DRNG) de Intel®" . Software.intel.com . Consultado el 30 de enero de 2014 .
- 1 2 Taylor, Greg; Cox, George (septiembre de 2011). "Detrás del nuevo generador de números aleatorios de Intel" . IEEE Spectrum . Archivado del original el 6 de septiembre de 2011.
- ↑ John Mechalas (noviembre de 2012). "La diferencia entre RDRAND y RDSEED" . software.intel.com . Intel Corporation . Consultado el 1 de enero de 2014 .
- ↑ Mechalas, John. "Guía de implementación de software del generador de números aleatorios digitales (DRNG) de Intel, Sección 3.2.1 Fuente de entropía (ES)" . Software de Intel . Intel . Consultado el 18 de febrero de 2015 .
- ↑ https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide dice 800 megabytes, que son 6,4 gigabits por segundo.
- ↑ La implementación más simple de 64 bits de Xorshift tiene 3 XOR y 3 desplazamientos ; si estos se ejecutan en un bucle cerrado en 4 núcleos a 2 GHz, el rendimiento es de 80 Gb/s. En la práctica será menor debido a la sobrecarga de carga/almacenamiento, etc., pero es probable que aún supere los 6,4 Gb/s de
RDRAND. Por otro lado, la calidad deRDRANDlos números de debería ser mayor que la de un PRNG de software como Xorshift. - 1 2 "Tablas de instrucciones: listas de latencias de instrucciones, rendimientos y desglose de microoperaciones para CPU Intel y AMD" (PDF) . Archivado del original (PDF) el 8 de agosto de 2006.
- 1 2 Route, Matthew (10 de agosto de 2017). "Síntesis de población de enanas ultrafrías con llamaradas de radio" . The Astrophysical Journal . 845 (1): 66. arXiv : 1707.02212 . Bibcode : 2017ApJ...845...66R . doi : 10.3847/1538-4357/aa7ede . S2CID 118895524 .
- 1 2 3 4 "Muestreo de datos de búfer de registro especial" . Intel . Consultado el 26 de diciembre de 2020 .
- ↑ "Lista de intrínsecos x86" . docs.microsoft.com . 28/02/2020 . Consultado el 07/05/2020 .
- ↑ "Funciones integradas de X86: uso de la colección de compiladores GNU (GCC)" .
- ↑ "Guía y referencia para desarrolladores del compilador Intel® C++ 19.1" . 23/12/2019.
- ↑ Route, Matthew (2019). "Síntesis de población de enanas ultrafrías con llamaradas de radio impulsadas por clave segura de Intel" . Resúmenes de la reunión de la Sociedad Astronómica Estadounidense n . ° 234. 234. Reunión de la Sociedad Astronómica Estadounidense n.° 234, id. 207.01. Boletín de la Sociedad Astronómica Estadounidense, vol. 51, n.° 4. Bibcode : 2019AAS...23420701R .
- 1 2 Perlroth, Nicole; Larson, Jeff; Shane, Scott (5 de septiembre de 2013). "La NSA es capaz de burlar las salvaguardas básicas de privacidad en la web" . The New York Times . Recuperado el 15 de noviembre de 2017 .
- ↑ Ts'o, Theodore (6 de septiembre de 2013). "Me alegro mucho de haber resistido la presión de los ingenieros de Intel para dejar que /dev/random dependiera..." Archivado del original el 11 de junio de 2018.
- 12Richard Chirgwin (2013-12-09). "FreeBSD abandoning hardware randomness". The Register.
- ↑Gavin Clarke (10 September 2013). "Torvalds shoots down call to yank 'backdoored' Intel RDRAND in Linux crypto". theregister.co.uk. Retrieved 12 March 2014.
- ↑Taylor Hornby (6 December 2013). "RDRAND backdoor proof of concept is working! Stock kernel (3.8.13), only the RDRAND instruction is modified". Retrieved 9 April 2015.
- ↑Taylor Hornby [@DefuseSec] (10 September 2013). "I wrote a short dialogue explaining why Linux's use of RDRAND is problematic. http://pastebin.com/A07q3nL3 /cc @kaepora @voodooKobra" (Tweet). Retrieved 11 January 2016– via Twitter.
- ↑Daniel J. Bernstein; Tanja Lange (16 May 2014). "Randomness generation"(PDF). Retrieved 9 April 2015.
- ↑Ts'o, Theodore (2013-10-10). "random: mix in architectural randomness earlier in extract_buf()". GitHub. Retrieved 30 July 2021.
- ↑"FreeBSD Quarterly Status Report". Freebsd.org. Retrieved 2014-01-30.
- ↑"random(4)". www.freebsd.org. Retrieved 2020-09-25.
- 123Ragab, Hany; Milburn, Alyssa; Razavi, Kaveh; Bos, Herbert; Giuffrida, Cristiano. "CrossTalk: Speculative Data Leaks Across Cores Are Real"(PDF). Systems and Network Security Group, Vrije Universiteit Amsterdam (VUSec). Retrieved 26 December 2020.
- ↑"VUSec RIDL cpuid_leak PoC, modified to leak rdrand output". GitHub. Retrieved 26 December 2020.
- ↑"Processors Affected: Special Register Buffer Data Sampling". Intel Developer Zone. Intel. Archived from the original on 4 March 2021. Retrieved 26 December 2020.
- ↑"Processors Affected: Special Register Buffer Data Sampling". Intel. Archived from the original on 18 May 2025. Retrieved 2025-05-18.
- ↑ Jones, Conner (5 de noviembre de 2025). "AMD en aprietos por un error en la generación de números aleatorios que compromete la seguridad criptográfica" . The Register . Consultado el 8 de noviembre de 2025 .
{{cite web}}: CS1 mantenimiento: estado de la URL ( enlace ) - ↑ "Fallo de RDSEED en procesadores AMD Zen 5" . Soporte de TI de Lenovo . 24/10/2025 . Consultado el 08/11/2025 .
{{cite web}}: CS1 mantenimiento: estado de la URL ( enlace )
Enlaces externos
- Proyecto de código abierto RdRand .NET
- Instrucciones X86
- Presentaciones relacionadas con la informática en 2012
- Código máquina
- generación de números aleatorios
- Arquitectura X86