stringtranslate.com

Generación de números aleatorios

Los dados son un ejemplo de un generador de números aleatorios de hardware mecánico. Cuando se lanza un dado cúbico se obtiene un número aleatorio del 1 al 6.

La generación de números aleatorios es un proceso mediante el cual, a menudo mediante un generador de números aleatorios ( RNG ), se genera una secuencia de números o símbolos que no se pueden predecir razonablemente mejor que por casualidad . Esto significa que la secuencia de resultados particular contendrá algunos patrones detectables en retrospectiva pero imposibles de prever. Los verdaderos generadores de números aleatorios pueden ser generadores de números aleatorios de hardware (HRNG), en los que cada generación es una función del valor actual de un atributo de un entorno físico que cambia constantemente de una manera que es prácticamente imposible de modelar. Esto contrastaría con las llamadas "generaciones de números aleatorios" realizadas por generadores de números pseudoaleatorios (PRNG), que generan números que sólo parecen aleatorios pero que en realidad están predeterminados; estas generaciones se pueden reproducir simplemente conociendo el estado del PRNG. [1]

Diversas aplicaciones de la aleatoriedad han llevado al desarrollo de diferentes métodos para generar datos aleatorios . Algunas de estas han existido desde la antigüedad, incluidos ejemplos bien conocidos como tirar dados , lanzar monedas , barajar naipes , el uso de tallos de milenrama (para adivinación ) en el I Ching , así como innumerables otras técnicas. Debido a la naturaleza mecánica de estas técnicas, generar grandes cantidades de números suficientemente aleatorios (importantes en estadística) requirió mucho trabajo y tiempo. Por lo tanto, en ocasiones los resultados se recopilarían y distribuirían como tablas de números aleatorios .

Existen varios métodos computacionales para la generación de números pseudoaleatorios. Ninguno de ellos alcanza el objetivo de la verdadera aleatoriedad, aunque pueden superar, con diferente éxito, algunas de las pruebas estadísticas de aleatoriedad destinadas a medir cuán impredecibles son sus resultados (es decir, hasta qué punto sus patrones son discernibles). Esto generalmente los hace inutilizables para aplicaciones como la criptografía . Sin embargo, también existen generadores de números pseudoaleatorios criptográficamente seguros (CSPNGS) cuidadosamente diseñados, con características especiales diseñadas específicamente para su uso en criptografía.

Aplicaciones y usos prácticos

Los generadores de números aleatorios tienen aplicaciones en juegos de azar , muestreo estadístico , simulación por computadora , criptografía , diseño completamente aleatorio y otras áreas donde es deseable producir un resultado impredecible. Generalmente, en aplicaciones que tienen la imprevisibilidad como característica primordial, como en aplicaciones de seguridad, se prefieren los generadores de hardware a los algoritmos pseudoaleatorios, cuando sea posible.

Los generadores de números pseudoaleatorios son muy útiles para desarrollar simulaciones del método Monte Carlo , ya que la depuración se ve facilitada por la capacidad de ejecutar la misma secuencia de números aleatorios nuevamente comenzando desde la misma semilla aleatoria . También se utilizan en criptografía, siempre que la semilla sea secreta. El remitente y el receptor pueden generar el mismo conjunto de números automáticamente para usarlos como claves.

La generación de números pseudoaleatorios es una tarea importante y común en la programación informática. Mientras que la criptografía y ciertos algoritmos numéricos requieren un grado muy alto de aleatoriedad aparente , muchas otras operaciones sólo necesitan una modesta cantidad de imprevisibilidad. Algunos ejemplos simples podrían ser presentarle a un usuario una "cita aleatoria del día" o determinar en qué dirección podría moverse un adversario controlado por computadora en un juego de computadora. Se utilizan formas más débiles de aleatoriedad en los algoritmos hash y en la creación de algoritmos de búsqueda y clasificación amortizados .

Algunas aplicaciones que a primera vista parecen apropiadas para la aleatorización , en realidad no lo son tan sencillas. Por ejemplo, un sistema que selecciona "al azar" pistas de música para un sistema de música de fondo sólo debe aparecer al azar, e incluso puede tener formas de controlar la selección de música: un verdadero sistema aleatorio no tendría restricción para que el mismo elemento aparezca dos o tres. veces seguidas.

Números verdaderos frente a números pseudoaleatorios

Hay dos métodos principales utilizados para generar números aleatorios. El primer método mide algún fenómeno físico que se espera que sea aleatorio y luego compensa posibles sesgos en el proceso de medición. Las fuentes de ejemplo incluyen la medición del ruido atmosférico , el ruido térmico y otros fenómenos electromagnéticos y cuánticos externos. Por ejemplo, la radiación cósmica de fondo o la desintegración radiactiva medida en escalas de tiempo cortas representan fuentes de entropía natural (como medida de imprevisibilidad o sorpresa del proceso de generación de números).

La velocidad a la que se puede obtener entropía de fuentes naturales depende de los fenómenos físicos subyacentes que se miden. Por lo tanto, se dice que las fuentes de entropía "verdadera" que se producen naturalmente están bloqueando  : tienen un ritmo limitado hasta que se recolecta suficiente entropía para satisfacer la demanda. En algunos sistemas tipo Unix, incluida la mayoría de las distribuciones de Linux , el archivo de pseudodispositivo /dev/random se bloqueará hasta que se recopile suficiente entropía del entorno. [2] Debido a este comportamiento de bloqueo, las lecturas masivas de /dev/random , como llenar una unidad de disco duro con bits aleatorios, a menudo pueden ser lentas en sistemas que utilizan este tipo de fuente de entropía.

El segundo método utiliza algoritmos computacionales que pueden producir largas secuencias de resultados aparentemente aleatorios, que en realidad están completamente determinados por un valor inicial más corto, conocido como valor semilla o clave . Como resultado, toda la secuencia aparentemente aleatoria se puede reproducir si se conoce el valor inicial. Este tipo de generador de números aleatorios suele denominarse generador de números pseudoaleatorios . Este tipo de generador normalmente no depende de fuentes de entropía naturales, aunque puede ser sembrado periódicamente por fuentes naturales. Este tipo de generador no es de bloqueo, por lo que no está limitado por un evento externo, lo que hace posible la posibilidad de realizar grandes lecturas masivas.

Algunos sistemas adoptan un enfoque híbrido, proporcionando aleatoriedad extraída de fuentes naturales cuando están disponibles, y recurriendo a generadores de números pseudoaleatorios criptográficamente seguros (CSPRNG) basados ​​en software periódicamente resembrados . El retroceso ocurre cuando la tasa de lectura aleatoria deseada excede la capacidad del enfoque de recolección natural para mantenerse al día con la demanda. Este enfoque evita el comportamiento de bloqueo de velocidad limitada de los generadores de números aleatorios basados ​​en métodos más lentos y puramente ambientales.

Aunque un generador de números pseudoaleatorios basado únicamente en lógica determinista nunca puede considerarse una "verdadera" fuente de números aleatorios en el sentido más puro de la palabra, en la práctica suelen ser suficientes incluso para aplicaciones exigentes y críticas para la seguridad. Los generadores de números pseudoaleatorios cuidadosamente diseñados e implementados pueden certificarse para fines criptográficos críticos para la seguridad, como es el caso del algoritmo yarrow y fortuna . El primero es la base de la fuente de entropía /dev/random en FreeBSD , AIX , OS X , NetBSD y otros. OpenBSD utiliza un algoritmo de números pseudoaleatorios conocido como arc4random . [ dudoso ] [3]

Métodos de generación

Métodos físicos

Los primeros métodos para generar números aleatorios, como los dados, el lanzamiento de monedas y la ruleta, todavía se utilizan hoy en día, principalmente en juegos y apuestas, ya que tienden a ser demasiado lentos para la mayoría de las aplicaciones de estadística y criptografía.

Un generador físico de números aleatorios puede basarse en un fenómeno físico atómico o subatómico esencialmente aleatorio cuya imprevisibilidad puede atribuirse a las leyes de la mecánica cuántica . [4] [5] Las fuentes de entropía incluyen la desintegración radiactiva , el ruido térmico , el ruido de disparo , el ruido de avalancha en los diodos Zener , la deriva del reloj , la sincronización de los movimientos reales de un cabezal de lectura y escritura de un disco duro y el ruido de radio . Sin embargo, los fenómenos físicos y las herramientas utilizadas para medirlos generalmente presentan asimetrías y sesgos sistemáticos que hacen que sus resultados no sean uniformemente aleatorios. Se puede utilizar un extractor de aleatoriedad , como una función hash criptográfica , para aproximarse a una distribución uniforme de bits de una fuente aleatoria no uniforme, aunque a una velocidad de bits más baja.

La aparición de fuentes de entropía fotónica de banda ancha, como el caos óptico y el ruido de emisión espontánea amplificado , ayuda enormemente al desarrollo del generador físico de números aleatorios. Entre ellos, el caos óptico [6] [7] tiene un alto potencial para producir físicamente números aleatorios de alta velocidad debido a su gran ancho de banda y gran amplitud. En 2013 se construyó un prototipo de un generador físico de bits aleatorios en tiempo real y de alta velocidad basado en un láser caótico.

Se han ideado varias formas imaginativas de recopilar esta información entrópica. Una técnica consiste en ejecutar una función hash en un fotograma de una secuencia de vídeo procedente de una fuente impredecible. Lavarand utilizó esta técnica con imágenes de varias lámparas de lava . HotBits midió la desintegración radiactiva con tubos Geiger-Muller , [9] mientras que Random.org utiliza variaciones en la amplitud del ruido atmosférico registrado con una radio normal.

Demostración de un generador de números aleatorios simple basado en dónde y cuándo se hace clic en un botón

Otra fuente de entropía común es el comportamiento de los usuarios humanos del sistema. Si bien las personas no se consideran buenos generadores de aleatoriedad cuando se les solicita, generan comportamiento aleatorio bastante bien en el contexto de juegos de estrategia mixta . [10] Algunos programas informáticos relacionados con la seguridad requieren que el usuario realice una serie prolongada de movimientos del mouse o entradas del teclado para crear la entropía suficiente necesaria para generar claves aleatorias o inicializar generadores de números pseudoaleatorios. [11]

Métodos computacionales

La mayoría de los números aleatorios generados por computadora utilizan PRNG, que son algoritmos que pueden crear automáticamente largas series de números con buenas propiedades aleatorias, pero eventualmente la secuencia se repite (o el uso de la memoria crece sin límites). Estos números aleatorios están bien en muchas situaciones, pero no son tan aleatorios como los números generados a partir del ruido atmosférico electromagnético utilizado como fuente de entropía. [12] La serie de valores generados por tales algoritmos generalmente está determinada por un número fijo llamado semilla . Uno de los PRNG más comunes es el generador congruencial lineal , que utiliza la recurrencia

para generar números, donde a , b y m son números enteros grandes y es el siguiente en X como una serie de números pseudoaleatorios. El número máximo de números que la fórmula puede producir es el módulo , m . La relación de recurrencia se puede extender a matrices para que tengan períodos mucho más largos y mejores propiedades estadísticas. [13] Para evitar ciertas propiedades no aleatorias de un único generador congruente lineal, se pueden utilizar en paralelo varios generadores de números aleatorios con valores ligeramente diferentes del coeficiente multiplicador, a , con un generador de números aleatorios "maestro" que selecciona entre entre los diferentes generadores. [ cita necesaria ]

Un método sencillo con lápiz y papel para generar números aleatorios es el llamado método del cuadrado medio sugerido por John von Neumann . Si bien es fácil de implementar, su resultado es de mala calidad. Tiene un período muy corto y graves debilidades, como que la secuencia de salida casi siempre converge a cero. Una innovación reciente es combinar el cuadrado del medio con una secuencia de Weyl . Este método produce resultados de alta calidad durante un largo período. [14]

La mayoría de los lenguajes de programación de computadoras incluyen funciones o rutinas de biblioteca que proporcionan generadores de números aleatorios. A menudo están diseñados para proporcionar un byte o una palabra aleatoria, o un número de punto flotante distribuido uniformemente entre 0 y 1.

La calidad, es decir, la aleatoriedad de dichas funciones de biblioteca, varía ampliamente desde resultados completamente predecibles hasta criptográficamente seguros. El generador de números aleatorios predeterminado en muchos idiomas, incluidos Python, Ruby, R, IDL y PHP, se basa en el algoritmo Mersenne Twister y no es suficiente para fines de criptografía, como se indica explícitamente en la documentación del idioma. Estas funciones de biblioteca suelen tener propiedades estadísticas deficientes y algunas repetirán patrones después de sólo decenas de miles de pruebas. A menudo se inicializan utilizando el reloj en tiempo real de una computadora como semilla, ya que dicho reloj es de 64 bits y mide en nanosegundos, mucho más allá de la precisión de la persona . Estas funciones pueden proporcionar suficiente aleatoriedad para determinadas tareas (por ejemplo, videojuegos), pero no son adecuadas cuando se requiere aleatoriedad de alta calidad, como en aplicaciones de criptografía, estadísticas o análisis numérico. [ cita necesaria ]

En la mayoría de los sistemas operativos se encuentran disponibles fuentes de números aleatorios de mucha mayor calidad; por ejemplo /dev/random en varias versiones de BSD, Linux, Mac OS X, IRIX y Solaris, o CryptGenRandom para Microsoft Windows. La mayoría de los lenguajes de programación, incluidos los mencionados anteriormente, proporcionan un medio para acceder a estas fuentes de mayor calidad.

Por humanos

La generación de números aleatorios también puede ser realizada por humanos, recopilando diversas entradas de los usuarios finales y utilizándolas como fuente de aleatorización. Sin embargo, la mayoría de los estudios encuentran que los sujetos humanos tienen cierto grado de no aleatoriedad cuando intentan producir una secuencia aleatoria de, por ejemplo, dígitos o letras. Pueden alternar demasiado entre opciones en comparación con un buen generador aleatorio; [15] por lo tanto, este enfoque no se utiliza ampliamente.

Postprocesamiento y controles estadísticos.

Incluso dada una fuente de números aleatorios plausibles (quizás de un generador de hardware basado en la mecánica cuántica), es necesario obtener números que sean completamente imparciales. Además, el comportamiento de estos generadores a menudo cambia con la temperatura, el voltaje de la fuente de alimentación, la antigüedad del dispositivo u otras interferencias externas. Y un error de software en una rutina de números pseudoaleatorios, o un error de hardware en el hardware en el que se ejecuta, pueden ser igualmente difíciles de detectar.

Los números aleatorios generados a veces se someten a pruebas estadísticas antes de su uso para garantizar que la fuente subyacente sigue funcionando y luego se procesan posteriormente para mejorar sus propiedades estadísticas. Un ejemplo sería el generador de números aleatorios de hardware TRNG9803 [16] , que utiliza una medición de entropía como prueba de hardware y luego postprocesa la secuencia aleatoria con un cifrado de flujo de registro de desplazamiento. Generalmente es difícil utilizar pruebas estadísticas para validar los números aleatorios generados. Wang y Nicol [17] propusieron una técnica de prueba estadística basada en la distancia que se utiliza para identificar las debilidades de varios generadores aleatorios. Li y Wang [18] propusieron un método para probar números aleatorios basado en fuentes de entropía caótica láser utilizando propiedades de movimiento browniano.

Otras Consideraciones

Remodelando la distribución

Distribuciones uniformes

La distribución uniforme "canónica" está entre 0 y 1. Como la mayoría de los generadores de números aleatorios funcionan de forma nativa con números enteros o bits individuales, se requiere una conversión adicional. La implementación no es tan trivial como dividir el número entero por su máximo valor posible. Específicamente: [19] [20]

  1. El número entero utilizado en la transformación debe proporcionar suficientes bits para la precisión deseada.
  2. La propia naturaleza de las matemáticas de punto flotante significa que existe más precisión cuanto más cerca está el número de cero.
  3. El error de redondeo en la división puede sesgar el resultado. En el peor de los casos, un límite supuestamente excluido puede trazarse en contra de las expectativas basadas en matemáticas de números reales.

El algoritmo principal, utilizado por OpenJDK , Rust y NumPy , se describe en una propuesta para STL de C++ . No utiliza la precisión adicional y sufre de sesgo solo en el último bit debido al redondeo a par. [21] Se justifican otras preocupaciones numéricas al cambiar esta distribución uniforme "canónica" a un rango diferente. [22] Un método propuesto para el lenguaje de programación Swift pretende utilizar la precisión total en todas partes. [23]

Los números enteros distribuidos uniformemente se utilizan comúnmente en algoritmos como el aleatorio de Fisher-Yates . Nuevamente, una implementación ingenua puede inducir un sesgo de módulo en el resultado, por lo que se deben utilizar algoritmos más complicados. Daniel Lemire describió en 2018 un método que casi nunca realiza la división, [24] y el estado actual de la técnica es el "algoritmo óptimo" de 2021 inspirado en la codificación aritmética de Stephen Canon de Apple Inc. [25]

La mayoría de los RNG de 0 a 1 incluyen 0 pero excluyen 1, mientras que otros incluyen o excluyen ambos.

Otras distribuciones

Dada una fuente de números aleatorios uniformes, existen un par de métodos para crear una nueva fuente aleatoria que corresponda a una función de densidad de probabilidad . Un método, llamado método de inversión , implica integrar hasta un área mayor o igual al número aleatorio (que debe generarse entre 0 y 1 para distribuciones adecuadas). Un segundo método, llamado método de aceptación-rechazo , implica elegir un valor de xey y probar si la función de x es mayor que el valor de y. Si es así, se acepta el valor de x. De lo contrario, el valor de x se rechaza y el algoritmo vuelve a intentarlo. [26] [27]

Como ejemplo de muestreo de rechazo, para generar un par de números aleatorios estándar estadísticamente independientes distribuidos normalmente ( x , y ), primero se pueden generar las coordenadas polares ( r , θ ), donde r 2 ~ χ 2 2 y θ ~ UNIFORM( 0,2π) (ver Transformada de Box-Muller ).

Blanqueo

Las salidas de múltiples RNG independientes se pueden combinar (por ejemplo, usando una operación XOR bit a bit ) para proporcionar un RNG combinado al menos tan bueno como el mejor RNG utilizado. Esto se conoce como blanqueamiento por software .

A veces se combinan generadores de números aleatorios computacionales y de hardware para reflejar los beneficios de ambos tipos. Los generadores computacionales de números aleatorios normalmente pueden generar números pseudoaleatorios mucho más rápido que los generadores físicos, mientras que los generadores físicos pueden generar "aleatoriedad verdadera".

Secuencias de baja discrepancia como alternativa.

Algunos cálculos que utilizan un generador de números aleatorios se pueden resumir como el cálculo de un valor total o promedio, como el cálculo de integrales mediante el método de Monte Carlo . Para tales problemas, puede ser posible encontrar una solución más precisa mediante el uso de las llamadas secuencias de baja discrepancia , también llamadas números cuasi aleatorios . Tales secuencias tienen un patrón definido que llena los vacíos de manera uniforme, cualitativamente hablando; una secuencia verdaderamente aleatoria puede dejar, y suele dejar, huecos más grandes.

Actividades y demostraciones

Los siguientes sitios ponen a disposición muestras de números aleatorios:

puertas traseras

Dado que gran parte de la criptografía depende de un generador de números aleatorios criptográficamente seguro para la generación de claves y nonce criptográficos , si un generador de números aleatorios puede hacerse predecible, un atacante puede utilizarlo como puerta trasera para romper el cifrado.

Se informa que la NSA ha insertado una puerta trasera en el generador de números pseudoaleatorios criptográficamente seguro y certificado por el NIST , Dual EC DRBG . Si, por ejemplo, se crea una conexión SSL utilizando este generador de números aleatorios, según Matthew Green, esto permitiría a la NSA determinar el estado del generador de números aleatorios y, por lo tanto, eventualmente podría leer todos los datos enviados a través de la conexión SSL. [28] Aunque era evidente que Dual_EC_DRBG era un generador de números pseudoaleatorios muy pobre y posiblemente con puerta trasera mucho antes de que se confirmara la puerta trasera de la NSA en 2013, había visto un uso significativo en la práctica hasta 2013, por ejemplo por parte de la destacada empresa de seguridad RSA Security . [29] Posteriormente ha habido acusaciones de que RSA Security insertó a sabiendas una puerta trasera de la NSA en sus productos, posiblemente como parte del programa Bullrun . RSA ha negado haber insertado conscientemente una puerta trasera en sus productos. [30]

También se ha teorizado que los RNG de hardware podrían modificarse en secreto para que tengan menos entropía de la indicada, lo que haría que el cifrado utilizando el RNG de hardware fuera susceptible de ataque. Uno de esos métodos que se ha publicado funciona modificando la máscara dopante del chip, lo que sería indetectable mediante ingeniería óptica inversa. [31] Por ejemplo, para la generación de números aleatorios en Linux, se considera inaceptable utilizar el RNG de hardware RDRAND de Intel sin mezclar la salida de RDRAND con otras fuentes de entropía para contrarrestar cualquier puerta trasera en el RNG de hardware, especialmente después de la revelación del Programa Bullrun de la NSA. [32] [33]

En 2010, un sorteo de lotería estadounidense fue manipulado por el director de seguridad de la información de la Asociación de Lotería Multiestatal (MUSL), quien subrepticiamente instaló malware de puerta trasera en la computadora segura RNG de MUSL durante el mantenimiento de rutina. [34] Durante los hacks, el hombre ganó una cantidad total de 16.500.000 dólares al predecir los números correctamente varias veces al año.

Ver también

Referencias

  1. ^ Lugrin, Thomas (2023), Mulder, Valentín; Mermoud, Alain; Prestamistas, Vicente; Tellenbach, Bernhard (eds.), "Generador de números aleatorios", Tendencias en protección de datos y tecnologías de cifrado , Cham: Springer Nature Suiza, págs. 31–34, doi : 10.1007/978-3-031-33386-6_7 , ISBN 978-3-031-33386-6, recuperado el 13 de octubre de 2023
  2. ^ random(4)  –  Manual del programador de Linux – Archivos especiales
  3. ^ arc4random(3)  -  Manual de funciones de la biblioteca OpenBSD
  4. ^ Herrero-Collantes, Miguel; García-Escartín, Juan Carlos (2016). "Generadores cuánticos de números aleatorios". Reseñas de Física Moderna . 89 . arXiv : 1604.03304 . doi : 10.1103/RevModPhys.89.015004. S2CID  118592321.
  5. ^ Jacak, Marcin M.; Jóźwiak, Piotr; Niemczuk, Jakub; Jacak, Janusz E. (2021). "Generadores cuánticos de números aleatorios". Informes científicos . 11 (1): 16108. doi : 10.1038/s41598-021-95388-7 . PMC 8352985 . PMID  34373502. 
  6. ^ Li, Pu; Wang, Yun-Cai; Zhang, Jian-Zhong (13 de septiembre de 2010). "Generador rápido de números aleatorios totalmente óptico". Óptica Express . 18 (19): 20360–20369. Código Bib : 2010OExpr..1820360L. doi : 10.1364/OE.18.020360 . ISSN  1094-4087. PMID  20940928.
  7. ^ Li, Pu; Sol, Yuanyuan; Liu, Xianglian; Yi, Xiaogang; Zhang, Jianguo; Guo, Xiaomin; Guo, Yanqiang; Wang, Yuncai (15 de julio de 2016). "Generador de bits aleatorios físicos totalmente basado en fotónica". Letras de Óptica . 41 (14): 3347–3350. Código Bib : 2016OptL...41.3347L. doi :10.1364/OL.41.003347. ISSN  1539-4794. PMID  27420532. S2CID  2909061.
  8. ^ Wang, Anbang; Li, Pu; Zhang, Jianguo; Zhang, Jianzhong; Li, Lei; Wang, Yuncai (26 de agosto de 2013). "Generador de bits aleatorios físicos en tiempo real y alta velocidad de 4,5 Gbps". Óptica Express . 21 (17): 20452–20462. Código Bib : 2013OExpr..2120452W. doi : 10.1364/OE.21.020452 . ISSN  1094-4087. PMID  24105589. S2CID  10397141.
  9. ^ Caminante, John. "HotBits: números aleatorios genuinos" . Consultado el 27 de junio de 2009 .
  10. ^ Halprin, corrió; Naor, Moni . "Juegos para extraer aleatoriedad" (PDF) . Instituto Weizmann de Ciencias . Archivado desde el original (PDF) el 7 de agosto de 2011 . Consultado el 27 de junio de 2009 .
  11. ^ Fundación TrueCrypt. "Tutorial para principiantes de TrueCrypt, parte 3" . Consultado el 27 de junio de 2009 .
  12. ^ "RANDOM.ORG - Servicio de números aleatorios verdaderos". www.random.org . Consultado el 14 de enero de 2016 .
  13. ^ "Generadores de números pseudoaleatorios de alta dimensionalidad" . Consultado el 21 de noviembre de 2018 .
  14. ^ Widynski, Bernard (19 de mayo de 2020). "RNG de secuencia de Weyl del cuadrado medio". arXiv : 1704.00358 [cs.CR].
  15. ^ WAWagenaar (1972). "Generación de secuencias aleatorias por sujetos humanos: un estudio crítico de la literatura". Boletín Psicológico . 77 (1): 65–72. CiteSeerX 10.1.1.211.9085 . doi :10.1037/h0032060. 
  16. ^ Dömstedt, B. (2009). "TRNG9803 Generador de números aleatorios verdaderos". Fabricante: www.TRNG98.se.
  17. ^ Wang, Yongge (2014). "Propiedades estadísticas de secuencias pseudoaleatorias y experimentos con PHP y Debian OpenSSL". Seguridad Informática - ESORICS 2014 . Apuntes de conferencias sobre informática. vol. 8712. Heidelberg: Springer LNCS. págs. 454–471. doi :10.1007/978-3-319-11203-9_26. ISBN 978-3-319-11202-2.
  18. ^ Li, Pu; Yi, Xiaogang; Liu, Xianglian; Wang, Yuncai; Wang, Yongge (11 de julio de 2016). "Propiedades de movimiento browniano de generadores optoelectrónicos de bits aleatorios basados ​​en caos láser". Óptica Express . 24 (14): 15822–15833. Código Bib : 2016OExpr..2415822L. doi : 10.1364/OE.24.015822 . ISSN  1094-4087. PMID  27410852.
  19. ^ Goualard, F. (2020). "Generación de números aleatorios de coma flotante dividiendo números enteros: un estudio de caso". Ciencias Computacionales – ICCS 2020 . ICCS. Apuntes de conferencias sobre informática. vol. 12138. págs. 15-28. doi : 10.1007/978-3-030-50417-5_2 . ISBN 978-3-030-50416-8. S2CID  219889587.
  20. ^ Campbell, Taylor R. (2014). "Flotadores aleatorios uniformes: cómo generar un número de punto flotante de doble precisión en [0, 1] de manera uniforme y aleatoria dada una fuente aleatoria uniforme de bits" . Consultado el 4 de septiembre de 2021 .
  21. ^ "Una nueva especificación para std::generate_canonical". www.open-std.org .
  22. ^ Goualard, Frédéric (julio de 2021). "Dibujar números aleatorios de coma flotante a partir de un intervalo". HAL . Consultado el 4 de septiembre de 2021 .
  23. ^ NevinBR. "[stdlib] Mejoras en números aleatorios de punto flotante realizadas por NevinBR · Solicitud de extracción n.º 33560 · apple/swift". GitHub .
  24. ^ Lemire, Daniel (23 de febrero de 2019). "Generación rápida de enteros aleatorios en un intervalo". Transacciones ACM sobre modelado y simulación por computadora . 29 (1): 1–12. arXiv : 1805.10941 . doi :10.1145/3230636. S2CID  44061046.
  25. ^ "Un algoritmo óptimo para enteros aleatorios acotados por stephentyrone · Solicitud de extracción n.º 39143 · apple/swift". GitHub .
  26. ^ Las obras de matemáticas. "Métodos de generación comunes" . Consultado el 13 de octubre de 2011 .[ enlace muerto permanente ]
  27. ^ El grupo de algoritmos numéricos. "G05 - Generadores de números aleatorios" (PDF) . Manual de la biblioteca NAG, Marcos 23 . Consultado el 9 de febrero de 2012 .
  28. ^ Mateo Verde (18 de septiembre de 2013). "Los muchos defectos de Dual_EC_DRBG".
  29. ^ Matthew Green (20 de septiembre de 2013). "RSA advierte a los desarrolladores que no utilicen productos RSA".
  30. ^ "No permitimos puertas traseras en nuestros productos criptográficos, informa RSA a los clientes". Ars Técnica . 2013-09-20.
  31. ^ "Los investigadores pueden introducir un troyano indetectable en las CPU Ivy Bridge de Intel". Ars Técnica . 2013-09-18.
  32. ^ Theodore Ts'o. "Estoy muy contento de haber resistido la presión de los ingenieros de Intel para permitir que /dev/random dependa únicamente de la instrucción RDRAND". Google Mas.
  33. ^ Theodore Ts'o. "Re: [PATCH] /dev/random: Entropía insuficiente en muchas arquitecturas". LWN.
  34. ^ Nestel, ML (7 de julio de 2015). "Dentro de la estafa de lotería más grande de todos los tiempos". La bestia diaria . Consultado el 10 de julio de 2015 .

Otras lecturas

enlaces externos