stringtranslate.com

RDRANDA

RDRAND(para "leer aleatorio") es una instrucción para devolver números aleatorios desde un generador de números aleatorios de hardware en chip de Intel que ha sido sembrado por una fuente de entropía en chip. [1] También se conoce como Intel Secure Key Technology , [2] cuyo nombre en código es 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 es parte de las arquitecturas de conjuntos de instrucciones Intel 64 e IA-32 ). [5]RDRAND

El generador de números aleatorios cumple con estándares criptográficos y de seguridad como NIST SP 800-90A , [6] FIPS 140-2 y ANSI X9.82. [1] Intel también solicitó a Cryptography Research Inc. que revisara el generador de números aleatorios en 2012, lo que dio como resultado el artículo Análisis del generador de números aleatorios digitales Ivy Bridge de Intel . [7]

RDSEEDes similar RDRANDy proporciona acceso de nivel inferior al hardware generador de entropía. Las RDSEEDinstrucciones del generador y del procesador rdseedestán disponibles con las CPU Intel Broadwell [8] y las CPU AMD Zen . [9]

Descripción general

La CPUIDinstrucción se puede utilizar tanto en CPU AMD como Intel para comprobar si la RDRANDinstrucción es compatible. Si es así, el bit 30 del registro ECX se establece después de llamar a la función estándar CPUID 01H. [10] Los procesadores AMD se comprueban para la función utilizando la misma prueba. [11] RDSEED La disponibilidad se puede comprobar en CPU Intel de una manera similar. Si RDSEEDes compatible, el bit 18 del registro EBX se establece después de llamar a la función estándar CPUID 07H. [12]

El código de operación 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 a la RDRANDinstrucción y a la implementación de hardware del generador de números aleatorios (RNG) subyacente, [1] que recibió el nombre en código "Bull Mountain" durante el desarrollo. [14] Intel llama a su RNG "generador de números aleatorios digitales" o DRNG. El generador toma pares de muestras de entropía bruta de 256 bits generadas por la fuente de entropía del hardware y las aplica a un acondicionador de Estándar de cifrado avanzado (AES) (en modo CBC-MAC ) que las reduce a una única muestra de entropía condicionada de 256 bits. Un generador de bits aleatorios determinista llamado CTR DRBG definido en NIST SP 800-90A se genera a partir de 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. El uso de la RDSEEDoperación proporciona acceso a las muestras condicionadas de 256 bits del AES-CBC-MAC.

La RDSEEDinstrucción se agregó a Intel Secure Key para generar otro generador de números pseudoaleatorios, [15] disponible en las CPU BroadwellRDSEED . La fuente de entropía para la instrucción se ejecuta de manera asincrónica en un circuito con temporizador automático y utiliza 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 y subprocesos ). [17] La RDSEED​​instrucción está destinada a generar 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 RDRANDinstrucción RDSEEDtarda 110 ns, o 463 ciclos de reloj, independientemente del tamaño del operando (16/32/64 bits). Esta cantidad de ciclos de reloj se aplica a todos los procesadores con microarquitectura Skylake o Kaby Lake . En los procesadores con microarquitectura Silvermont , cada una de las instrucciones tarda alrededor de 1472 ciclos de reloj, independientemente del tamaño del operando; y en los procesadores Ivy BridgeRDRAND tarda hasta 117 ciclos de reloj. [19]

En una CPU AMD Ryzen, cada una de las instrucciones toma 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 7 números aleatorios de 64 bits utilizando RDRANDun 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 Mersenne Twister . Aunque se ha construido un módulo Python de RDRAND, 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 lanzada por Intel en junio de 2020, diseñada para mitigar la vulnerabilidad CrossTalk (consulte la sección de problemas de seguridad a continuación), afecta negativamente el rendimiento de RDRANDy RDSEEDdebido a 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 RDRANDo RDSEEDentre núcleos se serializa de manera efectiva. Intel introdujo un mecanismo para relajar estos controles de seguridad, reduciendo así el impacto en el rendimiento en la mayoría de los escenarios, pero los procesadores Intel no aplican esta relajación de seguridad de manera predeterminada. [21]

Compiladores

Visual C++ 2015 proporciona compatibilidad intrínseca con envoltorios para las funciones RDRANDy . [22] GCC 4.6+ y Clang 3.2+ proporcionan funciones intrínsecas para cuando se especifica en los indicadores , [23] también configurando para permitir la compilación condicional . Las versiones más nuevas también proporcionan la posibilidad de envolver estos elementos integrados en funciones compatibles con la versión 12.1+ del compilador C de Intel. Estas funciones escriben datos aleatorios en la ubicación indicada por su parámetro y devuelven 1 en caso de éxito. [24]RDSEED RDRAND-mrdrnd__RDRND__immintrin.h

Aplicaciones

Es una opción para generar números aleatorios criptográficamente seguros usando RDRANDy RDSEEDen OpenSSL , para ayudar a asegurar las comunicaciones.

Se evaluó la aplicación científica de Twister RDRANDen un simulador de Monte Carlo , centrándose en el rendimiento y la reproducibilidad, en comparación con otros generadores de números aleatorios. Se concluyó que el uso RDRANDde Twister en lugar de Mersenne no proporciona resultados diferentes, sino un rendimiento y una reproducibilidad peores. [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 lo siguiente sobre el uso de RDRANDfor /dev/randomen el kernel de Linux : [27]

Me alegro mucho de haber resistido la presión de los ingenieros de Intel para que /dev/randomdependiera únicamente de las RDRANDinstrucciones. Para citar el artículo del New York Times [26 ]: "Este año, el proyecto Sigint Enabling Project había encontrado formas de introducirse en 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 que es imposible de auditar es una MALA idea.

Linus Torvalds descartó las preocupaciones sobre el uso de RDRANDen el núcleo Linux y señaló que no se utiliza como la única fuente de entropía para /dev/random, sino que se utiliza 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 núcleo Linux sin modificar anterior a la versión 3.13. [30] [31] [32] El problema se mitigó en el núcleo Linux en 2013. [33]

Los desarrolladores cambiaron el kernel de FreeBSDRDRAND para que no use directamente VIA PadLock con el comentario "Para FreeBSD 10, vamos a dar marcha atrás y eliminar RDRANDlos backends de Padlock y alimentarlos a Yarrow en lugar de enviar su salida directamente a /dev/random . Todavía será posible acceder a generadores de números aleatorios de hardware, es decir, RDRANDVIA Padlock, etc., directamente mediante ensamblaje en línea o usando OpenSSL desde el espacio de usuario, si es necesario, pero ya no podemos confiar en ellos". [28] [34] FreeBSD /dev/random usa 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 de números aleatorios digitales (DRNG) de hardware se almacenaban en un búfer de ensayo 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 de ese 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 extraía 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 en los que 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 de 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 se completen las operaciones sensibles (específicamente las instrucciones RDRAND, RDSEEDy EGETKEY) y se haya sobrescrito el búfer de ensayo. [21] El ataque SRBDS también afecta a otras instrucciones, como las que leen MSR , pero Intel no les aplicó protecciones de seguridad adicionales 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 servidores. [38] 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 multiproceso, debido a la mayor latencia introducida por los controles 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 IA32_MCU_OPT_CTRLMSR 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]

Véase también

Notas

  1. ^ En algunas versiones de Ivy Bridge, debido a un error, la instrucción RDRAND provoca una excepción de instrucción ilegal. [4]

Referencias

  1. ^ abcd "Generador de números aleatorios digitales (DRNG) de Intel: Guía de implementación de software, revisión 1.1" (PDF) . Intel Corporation . 2012-08-07 . Consultado el 2012-11-25 .
  2. ^ "¿Qué es la tecnología Intel® Secure Key?". Intel . Consultado el 23 de septiembre de 2020 .
  3. ^ 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 .
  4. ^ Actualización de especificaciones de la familia de procesadores Intel Core de tercera generación para equipos de escritorio (PDF) . Intel Corporation. Enero de 2013.
  5. ^ "Manual del programador de la arquitectura AMD64, volumen 3: instrucciones generales y del sistema" (PDF) . Guías, manuales y documentos ISA para desarrolladores de AMD . Junio ​​de 2015 . Consultado el 16 de octubre de 2015 .
  6. ^ Barker, Elaine; Kelsey, John (enero de 2012). "Recomendación para la generación de números aleatorios utilizando 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 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  7. ^ 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 desde el original (PDF) el 2014-12-30 . Consultado el 2015-08-21 .
  8. ^ Hofemeier, Gael (26 de julio de 2012). "Introducción a las instrucciones Intel AES-NI e Intel SecureKey". Intel Developer Zone . Intel . Consultado el 24 de octubre de 2015 .
  9. ^ "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 .
  10. ^ "Volumen 1, Sección 7.3.17, 'Instrucción de generador de números aleatorios'" (PDF) . Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32 Volúmenes combinados: 1, 2A, 2B, 2C, 3A, 3B y 3C . Intel Corporation. Junio ​​de 2013. p. 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 mediante un informe CPUID.01H:ECX.RDRAND[bit 30] = 1
  11. ^ "Manual del programador de la arquitectura AMD64, volumen 3: instrucciones de sistema y de propósito general" (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
  12. ^ "Volumen 1, Sección 7.3.17, 'Instrucción de generador de números aleatorios'" (PDF) . Manual del desarrollador de software de 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
  13. ^ "Guía de implementación del software del generador de números aleatorios digitales (DRNG) de Intel®". Software.intel.com . Consultado el 30 de enero de 2014 .
  14. ^ ab Taylor, Greg; Cox, George (septiembre de 2011). "Detrás del nuevo generador de números aleatorios de Intel". IEEE Spectrum . Archivado desde el original el 6 de septiembre de 2011.
  15. ^ John Mechalas (noviembre de 2012). "La diferencia entre RDRAND y RDSEED". software.intel.com . Intel Corporation . Consultado el 1 de enero de 2014 .
  16. ^ Mechalas, John. "Guía de implementación del software del generador de números aleatorios digitales (DRNG) de Intel, sección 3.2.1 Fuente de entropía (ES)". Intel Software . Intel . Consultado el 18 de febrero de 2015 .
  17. ^ https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide dice 800 megabytes, lo que equivale a 6,4 gigabits por segundo.
  18. ^ La implementación de 64 bits más simple de Xorshift tiene 3 XOR y 3 desplazamientos ; si 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 los gastos generales de carga/almacenamiento, etc., pero es probable que supere los 6,4 Gb/s de RDRAND. Por otro lado, la calidad de RDRANDlos números de debería ser superior a la de un PRNG de software como Xorshift.
  19. ^ ab http://www.agner.org/optimize/instruction_tables.pdf [ URL básica PDF ]
  20. ^ ab 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.
  21. ^ abcd "Muestreo de datos de búfer de registro especial". Intel . Consultado el 26 de diciembre de 2020 .
  22. ^ "Lista de intrínsecos x86". docs.microsoft.com . 28 de febrero de 2020 . Consultado el 7 de mayo de 2020 .
  23. ^ "Funciones integradas de X86 - Uso de la colección de compiladores GNU (GCC)".
  24. ^ "Guía y referencia para desarrolladores del compilador Intel® C++ 19.1". 23 de diciembre de 2019.
  25. ^ Route, Matthew (2019). "Síntesis de población de enanas ultrafrías con destellos de radio activados por clave segura de Intel". Resúmenes de reuniones 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. Código Bibliográfico :2019AAS...23420701R.
  26. ^ ab Perlroth, Nicole; Larson, Jeff; Shane, Scott (5 de septiembre de 2013). "NSA Able to Foil Basic Safeguards of Privacy on Web" (La NSA puede frustrar las salvaguardas básicas de la privacidad en la Web). The New York Times . Consultado el 15 de noviembre de 2017 .
  27. ^ Ts'o, Theodore (6 de septiembre de 2013). "Me alegro mucho de haber resistido la presión de los ingenieros de Intel para que dejara que /dev/random confiara..." Archivado desde el original el 11 de junio de 2018.
  28. ^ por Richard Chirgwin (9 de diciembre de 2013). "FreeBSD abandona la aleatoriedad del hardware". The Register .
  29. ^ Gavin Clarke (10 de septiembre de 2013). "Torvalds rechaza el pedido de retirar el RDRAND de Intel con 'puerta trasera' en la criptografía de Linux". theregister.co.uk . Consultado el 12 de marzo de 2014 .
  30. ^ Taylor Hornby (6 de diciembre de 2013). "¡La prueba de concepto de la puerta trasera RDRAND está funcionando! El kernel estándar (3.8.13) solo modifica la instrucción RDRAND" . Consultado el 9 de abril de 2015 .
  31. ^ Taylor Hornby [@DefuseSec] (10 de septiembre de 2013). "Escribí un breve diálogo explicando por qué el uso de RDRAND en Linux es problemático. http://pastebin.com/A07q3nL3 /cc @kaepora @voodooKobra" ( Tweet ) . Consultado el 11 de enero de 2016 – vía Twitter .
  32. ^ Daniel J. Bernstein; Tanja Lange (16 de mayo de 2014). «Generación de aleatoriedad» (PDF) . Consultado el 9 de abril de 2015 .
  33. ^ Ts'o, Theodore (10 de octubre de 2013). "random: mezcla la aleatoriedad arquitectónica en extract_buf()". GitHub . Consultado el 30 de julio de 2021 .
  34. ^ "Informe trimestral sobre el estado de FreeBSD". Freebsd.org . Consultado el 30 de enero de 2014 .
  35. ^ "random(4)". www.freebsd.org . Consultado el 25 de septiembre de 2020 .
  36. ^ a b C Ragab, Hany; Milburn, Alyssa; Razaví, Kaveh; Bos, Herbert; Giuffrida, Cristiano. "CrossTalk: las fugas de datos especulativas entre núcleos son reales" (PDF) . Grupo de Seguridad de Redes y Sistemas, Vrije Universiteit Amsterdam (VUSec) . Consultado el 26 de diciembre de 2020 .
  37. ^ "Prueba de concepto de cpuid_leak de RIDL de VUSec, modificada para filtrar la salida de rdrand". GitHub . Consultado el 26 de diciembre de 2020 .
  38. ^ "Procesadores afectados: muestreo de datos del búfer de registro especial". Intel Developer Zone . Consultado el 26 de diciembre de 2020 .

Enlaces externos