stringtranslate.com

Generador de números pseudoaleatorios

Un generador de números pseudoaleatorios ( PRNG ), también conocido como generador determinista de bits aleatorios ( DRBG ), [1] es un algoritmo para generar una secuencia de números cuyas propiedades se aproximan a las propiedades de secuencias de números aleatorios . La secuencia generada por PRNG no es verdaderamente aleatoria , porque está completamente determinada por un valor inicial, llamado semilla del PRNG (que puede incluir valores verdaderamente aleatorios). Aunque se pueden generar secuencias más cercanas a lo verdaderamente aleatorio utilizando generadores de números aleatorios de hardware , los generadores de números pseudoaleatorios son importantes en la práctica por su velocidad en la generación de números y su reproducibilidad. [2]

Los PRNG son fundamentales en aplicaciones como simulaciones (por ejemplo, para el método Monte Carlo ), juegos electrónicos (por ejemplo, para generación de procedimientos ) y criptografía . Las aplicaciones criptográficas requieren que la salida no sea predecible a partir de salidas anteriores, y se necesitan algoritmos más elaborados , que no hereden la linealidad de los PRNG más simples.

Las buenas propiedades estadísticas son un requisito central para el resultado de un PRNG. En general, se requiere un análisis matemático cuidadoso para tener confianza en que un PRNG genera números lo suficientemente cercanos al azar para adaptarse al uso previsto. John von Neumann advirtió sobre la mala interpretación de un PRNG como un generador verdaderamente aleatorio, bromeando diciendo que "Cualquiera que considere métodos aritméticos para producir dígitos aleatorios está, por supuesto, en un estado de pecado". [3]

Problemas potenciales

En la práctica, la salida de muchos PRNG comunes presenta artefactos que hacen que no pasen las pruebas estadísticas de detección de patrones. Éstas incluyen:

Los defectos exhibidos por PRNG defectuosos varían desde imperceptibles (y desconocidos) hasta muy obvios. Un ejemplo fue el algoritmo de números aleatorios RANDU utilizado durante décadas en las computadoras centrales . Tenía graves fallos, pero su insuficiencia pasó desapercibida durante mucho tiempo.

En muchos campos, los trabajos de investigación anteriores al siglo XXI que se basaban en la selección aleatoria o en simulaciones de Monte Carlo , o de otras maneras se basaban en PRNG, eran mucho menos confiables que ideales como resultado del uso de PRNG de mala calidad. [4] Incluso hoy en día, a veces es necesario tener precaución, como lo ilustra la siguiente advertencia en la Enciclopedia Internacional de Ciencia Estadística (2010). [5]

La lista de generadores ampliamente utilizados que deberían descartarse es mucho más larga [que la lista de buenos generadores]. No confíe ciegamente en los proveedores de software. Verifique el RNG predeterminado de su software favorito y prepárese para reemplazarlo si es necesario. Esta última recomendación se ha hecho una y otra vez durante los últimos 40 años. Quizás resulte sorprendente que siga siendo tan relevante hoy como lo era hace 40 años.

A modo de ilustración, consideremos el lenguaje de programación ampliamente utilizado Java . Hasta 2020, Java todavía dependía de un generador congruencial lineal (LCG) para su PRNG, [6] [7] que es de baja calidad (ver más abajo). La compatibilidad con Java se actualizó con Java 17 .

Un PRNG muy conocido que evita problemas importantes y aun así funciona con bastante rapidez es el Mersenne Twister (que se analiza más adelante), que se publicó en 1998. Antes y después de esto se desarrollaron otros PRNG de mayor calidad, tanto en términos de rendimiento computacional como estadístico. fecha; estos se pueden identificar en la Lista de generadores de números pseudoaleatorios .

Generadores basados ​​en recurrencias lineales

En la segunda mitad del siglo XX, la clase estándar de algoritmos utilizados para los PRNG comprendía generadores congruentes lineales . Se sabía que la calidad de los LCG era inadecuada, pero no se disponía de mejores métodos. Prensa y col. (2007) describieron el resultado de esta manera: "Si todos los artículos científicos cuyos resultados están en duda debido a [LCG y relacionados] desaparecieran de los estantes de la biblioteca, habría un espacio en cada estante aproximadamente del tamaño de su puño". [8]

Un avance importante en la construcción de generadores pseudoaleatorios fue la introducción de técnicas basadas en recurrencias lineales en el campo de dos elementos; Dichos generadores están relacionados con registros de desplazamiento de retroalimentación lineal .

La invención del Mersenne Twister en 1997 , [9] en particular, evitó muchos de los problemas de los generadores anteriores. El Mersenne Twister tiene un período de 2 19 937  − 1 iteraciones (≈ 4,3 × 106001 ), se ha demostrado que está equidistribuido en (hasta) 623 dimensiones (para valores de 32 bits) y en el momento de su introducción funcionaba más rápido que otros generadores estadísticamente razonables.

En 2003, George Marsaglia introdujo la familia de generadores xorshift , [10] nuevamente basados ​​en una recurrencia lineal. Estos generadores son extremadamente rápidos y, combinados con un funcionamiento no lineal, superan rigurosas pruebas estadísticas. [11] [12] [13]

En 2006 se desarrolló la familia de generadores WELL . [14] Los generadores WELL mejoran de alguna manera la calidad del Mersenne Twister, que tiene un espacio de estados demasiado grande y una recuperación muy lenta de espacios de estados con una gran cantidad de ceros.

PRNG criptográficos

Un PRNG adecuado para aplicaciones criptográficas se denomina PRNG criptográficamente seguro (CSPRNG). Un requisito para un CSPRNG es que un adversario que no conozca la semilla solo tenga una ventaja insignificante para distinguir la secuencia de salida del generador de una secuencia aleatoria. En otras palabras, mientras que un PRNG solo debe pasar ciertas pruebas estadísticas, un CSPRNG debe pasar todas las pruebas estadísticas que están restringidas al tiempo polinomial en el tamaño de la semilla. Aunque una prueba de esta propiedad está más allá del estado actual del arte de la teoría de la complejidad computacional , se puede proporcionar evidencia sólida reduciendo al CSPRNG un problema que se supone difícil , como la factorización de enteros . [15] En general, pueden ser necesarios años de revisión antes de que un algoritmo pueda certificarse como CSPRNG.

Algunas clases de CSPRNG incluyen las siguientes:

Se ha demostrado que es probable que la NSA haya insertado una puerta trasera asimétrica en el generador de números pseudoaleatorios certificado por el NIST Dual_EC_DRBG . [19]

La mayoría de los algoritmos PRNG producen secuencias que se distribuyen uniformemente mediante cualquiera de varias pruebas. Es una pregunta abierta, y central para la teoría y la práctica de la criptografía , si hay alguna manera de distinguir la salida de un PRNG de alta calidad de una secuencia verdaderamente aleatoria. En esta configuración, el distinguidor sabe que se utilizó el algoritmo PRNG conocido (pero no el estado con el que se inicializó) o que se utilizó un algoritmo verdaderamente aleatorio, y tiene que distinguir entre los dos. [20] La seguridad de la mayoría de los algoritmos y protocolos criptográficos que utilizan PRNG se basa en la suposición de que no es factible distinguir el uso de un PRNG adecuado del uso de una secuencia verdaderamente aleatoria. Los ejemplos más simples de esta dependencia son los cifrados de flujo , que (la mayoría de las veces) funcionan excluyendo o agregando el texto sin formato de un mensaje con la salida de un PRNG, lo que produce texto cifrado . El diseño de PRNG criptográficamente adecuados es extremadamente difícil porque deben cumplir criterios adicionales. El tamaño de su período es un factor importante en la idoneidad criptográfica de un PRNG, pero no el único.

Criterios de evaluación de BSI

La Oficina Federal Alemana para la Seguridad de la Información ( en alemán : Bundesamt für Sicherheit in der Informationstechnik , BSI) ha establecido cuatro criterios para la calidad de los generadores deterministas de números aleatorios. [21] Se resumen aquí:

Para aplicaciones criptográficas, solo se aceptan generadores que cumplan con los estándares K3 o K4.

Definición matemática

Dado:

Llamamos a una función (donde está el conjunto de números enteros positivos) un generador de números pseudoaleatorios para valores dados en si y solo si :

( denota el número de elementos en el conjunto finito ).

Se puede demostrar que si es un generador de números pseudoaleatorios para la distribución uniforme de y si es la CDF de alguna distribución de probabilidad dada , entonces es un generador de números pseudoaleatorios para , donde es el percentil de , es decir . De manera intuitiva, se puede simular una distribución arbitraria a partir de una simulación de la distribución uniforme estándar.

Enfoques tempranos

Uno de los primeros PRNG basado en computadora, sugerido por John von Neumann en 1946, se conoce como método del cuadrado medio . El algoritmo es el siguiente: toma cualquier número, eleva al cuadrado, elimina los dígitos del medio del número resultante como "número aleatorio" y luego usa ese número como semilla para la siguiente iteración. Por ejemplo, al elevar al cuadrado el número "1111" se obtiene "1234321", que se puede escribir como "01234321", siendo un número de 8 dígitos el cuadrado de un número de 4 dígitos. Esto da "2343" como número "aleatorio". Al repetir este procedimiento se obtiene "4896" como siguiente resultado, y así sucesivamente. Von Neumann utilizó números de 10 dígitos, pero el proceso fue el mismo.

Un problema con el método del "cuadrado medio" es que todas las secuencias eventualmente se repiten, algunas muy rápidamente, como "0000". Von Neumann era consciente de esto, pero encontró que el enfoque era suficiente para sus propósitos y le preocupaba que las "correcciones" matemáticas simplemente ocultaran errores en lugar de eliminarlos.

Von Neumann consideró que los generadores de números aleatorios de hardware no eran adecuados, ya que, si no registraban la salida generada, no podían ser probados posteriormente para detectar errores. Si registraran su producción, agotarían las limitadas memorias de computadora disponibles en ese momento y, por lo tanto, la capacidad de la computadora para leer y escribir números. Si los números se escribieran en tarjetas, tardarían mucho más en escribirse y leerse. En la computadora ENIAC que estaba usando, el método del "cuadrado medio" generaba números a una velocidad cientos de veces más rápida que la lectura de números de tarjetas perforadas .

Desde entonces, el método del cuadrado medio ha sido reemplazado por generadores más elaborados.

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 (consulte el método del cuadrado medio ).

Generadores no uniformes

Los números seleccionados de una distribución de probabilidad no uniforme se pueden generar utilizando un PRNG de distribución uniforme y una función que relacione las dos distribuciones.

Primero, se necesita la función de distribución acumulativa de la distribución objetivo :

Tenga en cuenta que . Usando un número aleatorio c de una distribución uniforme como densidad de probabilidad de "pasar", obtenemos

de modo que

es un número seleccionado aleatoriamente de la distribución . Esto se basa en el muestreo de transformación inversa .

Por ejemplo, la inversa de la distribución gaussiana acumulativa con un PRNG uniforme ideal con rango (0, 1) como entrada produciría una secuencia de valores (solo positivos) con una distribución gaussiana; sin embargo

Se aplican consideraciones similares a la generación de otras distribuciones no uniformes como Rayleigh y Poisson .

Ver también

Referencias

  1. ^ Ladrador, Elaine; Barker, William; Rebabas, William; Polk, Guillermo; Smid, Miles (julio de 2012). "Recomendación para la gestión de claves" (PDF) . Publicación especial del NIST 800-57 . NIST . doi : 10.6028/NIST.SP.800-57p1r3 . Consultado el 19 de agosto de 2013 .
  2. ^ "Generadores de números pseudoaleatorios". Academia Khan . Consultado el 11 de enero de 2016 .
  3. ^ Von Neumann, Juan (1951). "Diversas técnicas utilizadas en relación con dígitos aleatorios" (PDF) . Serie de Matemáticas Aplicadas de la Oficina Nacional de Estándares . 12 : 36–38.
  4. ^ Prensa y col. (2007), capítulo 7
  5. ^ L'Ecuyer, Pierre (2010). "Generadores de números aleatorios uniformes". En Lovric, Miodrag (ed.). Enciclopedia Internacional de Ciencias Estadísticas . Saltador. pag. 1629.ISBN _ 978-3-642-04897-5.
  6. ^ Aleatorio (Java Platform SE 8), documentación de Java Platform Standard Edition 8.
  7. ^ Aleatorio.java en OpenJDK .
  8. ^ Prensa y col. (2007) §7.1
  9. ^ Matsumoto, Makoto; Nishimura, Takuji (1998). "Mersenne Twister: un generador de números pseudoaleatorios uniformes equidistribuidos de 623 dimensiones" (PDF) . Transacciones ACM sobre modelado y simulación por computadora . ACM . 8 (1): 3–30. doi :10.1145/272991.272995. S2CID  3332028.
  10. ^ Marsaglia, George (julio de 2003). "RNG Xorshift". Revista de software estadístico . 8 (14). doi : 10.18637/jss.v008.i14 . S2CID  250501391.
  11. ^ S. Vigna. "Generadores xorshift*/xorshift+ y el tiroteo del PRNG".
  12. ^ Vigna S. (2016), "Una exploración experimental de los generadores xorshift de Marsaglia", ACM Transactions on Mathematical Software , 42; doi :10.1145/2845077.
  13. ^ Vigna S. (2017), "Más codificaciones de los generadores xorshift de Marsaglia", Journal of Computational and Applied Mathematics , 315; doi :10.1016/j.cam.2016.11.006.
  14. ^ Panneton, François; L'Ecuyer, Pierre; Matsumoto, Makoto (2006). "Generadores mejorados de período largo basados ​​en recurrencias lineales módulo 2" (PDF) . Transacciones ACM sobre software matemático . 32 (1): 1–16. doi :10.1145/1132973.1132974. S2CID  7368302.
  15. ^ Song Y. Yan (7 de diciembre de 2007). Ataques criptoanalíticos a RSA . Springer, 2007. pág. 73.ISBN _ 978-0-387-48741-0.
  16. ^ Niels Ferguson , Bruce Schneier , Tadayoshi Kohno (2010). "Ingeniería de criptografía: principios de diseño y aplicaciones prácticas, Capítulo 9.4: El generador" (PDF) .{{cite web}}: Mantenimiento CS1: varios nombres: lista de autores ( enlace )
  17. ^ Klaus Pommerening (2016). "IV.4 Generadores aleatorios perfectos". Criptología . uni-mainz.de . Consultado el 12 de noviembre de 2017 .
  18. ^ Pase, Rafael. "Conferencia 11: El teorema de Goldreich-Levin" (PDF) . COM S 687 Introducción a la Criptografía . Consultado el 20 de julio de 2016 .
  19. ^ Matthew Green (18 de septiembre de 2013). "Los muchos defectos de Dual_EC_DRBG".
  20. ^ Katz, Jonathan; Yehuda, Lindell (2014). Introducción a la criptografía moderna . Prensa CRC. pag. 70.
  21. ^ ab Schindler, Werner (2 de diciembre de 1999). "Clases de funcionalidad y metodología de evaluación para generadores deterministas de números aleatorios" (PDF) . Anwendungshinweise und Interpretationen (AIS) . Bundesamt für Sicherheit in der Informationstechnik . págs. 5-11 . Consultado el 19 de agosto de 2013 .
  22. ^ "Requisitos de seguridad para módulos criptográficos". FIPS . NIST . 1994-01-11. pag. 4.11.1 Pruebas de encendido. Archivado desde el original el 27 de mayo de 2013 . Consultado el 19 de agosto de 2013 .

Bibliografía

enlaces externos